次の例があります
location / {
proxy_read_timeout 2000;
proxy_next_upstream error;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_Host;
proxy_pass_header X_CUSTOM_HEADER;
proxy_redirect off;
proxy_max_temp_file_size 0;
proxy_pass https://prod;
break;
}
次のカールラインを使用すると
curl --head -H "X_CUSTOM_HEADER: foo" http://domain.com/api/test
今では動作しません。バックエンドのApache/phpにはヘッダーが表示されません。私がnginxをバイパスした場合、それは機能します
curl --head -H "X_CUSTOM_HEADER: foo" http://web1.domain.com/api/test
underscores_in_headers on
ディレクティブ。デフォルトではオフになっています。
バックエンドサーバーに転送するすべてのヘッダーにproxy_set_header
を使用する必要があります。したがって、proxy_pass_header ...
行の代わりに:
proxy_set_header X_CUSTOM_HEADER $http_x_custom_header;
上記の方法でもうまくいかなかったので、proxy_pass_header
。 proxy_pass_headerに関するNginx Wikiはこちら を参照してください。
カスタムヘッダーがdevice_id
追加 proxy_pass_header device_id;
をProxyブロックに追加します。
(私のように)アンダースコアが含まれているカスタムヘッダーを使用している場合は、underscores_in_headers on
をNginx Configに追加します。
デフォルトでは、nginxはすべての(proxy_pass_request_headers on;)ヘッダーをバックエンドサーバーに転送します。ただし、リクエストヘッダー(カスタムヘッダーの場合があります)のヘッダー名にアンダースコア(_)が含まれている場合、nginxはそれらのヘッダーをブロックします。
Ex: authenticate_type, cdn_enable.
Nginxがすべてまたはカスタムのリクエストされたヘッダーをバックエンドに渡すことができるようにするには、アンダースコアオプションをオンにします。
underscores_in_headers on;