web-dev-qa-db-ja.com

カスタムヘッダーを返すnginx

次の例があります

           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
13
Mike

underscores_in_headers on ディレクティブ。デフォルトではオフになっています。

15
AlexD

バックエンドサーバーに転送するすべてのヘッダーにproxy_set_headerを使用する必要があります。したがって、proxy_pass_header ...行の代わりに:

proxy_set_header X_CUSTOM_HEADER $http_x_custom_header;
2
Mikko

上記の方法でもうまくいかなかったので、proxy_pass_headerproxy_pass_headerに関するNginx Wikiはこちら を参照してください。

カスタムヘッダーがdevice_id 追加 proxy_pass_header device_id;をProxyブロックに追加します。

(私のように)アンダースコアが含まれているカスタムヘッダーを使用している場合は、underscores_in_headers onをNginx Configに追加します。

2
user2700022

デフォルトでは、nginxはすべての(proxy_pass_request_headers on;)ヘッダーをバックエンドサーバーに転送します。ただし、リクエストヘッダー(カスタムヘッダーの場合があります)のヘッダー名にアンダースコア(_)が含まれている場合、nginxはそれらのヘッダーをブロックします。

Ex: authenticate_type, cdn_enable.

Nginxがすべてまたはカスタムのリクエストされたヘッダーをバックエンドに渡すことができるようにするには、アンダースコアオプションをオンにします。

underscores_in_headers on;
1
GangaRam Dewasi