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


13

次の例があります

           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

回答:



2

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

proxy_set_header X_CUSTOM_HEADER $http_x_custom_header;

私はそれを試してみましたが、ヘッダーが正しく設定されていません。$ http_x_custom_headerを "foo"に置き換えれば機能します
Mike

@Mikeでうまくいかなかった理由はわかりませんが、私にとってはうまくいきました。X-Forwarded-Protoと$ http_x_forwarded_protoを使用しています。
タイラーコリアー2014

2

上記もうまくいかなかったので使用しましたproxy_pass_headerここで、proxy_pass_headerに関するNginx Wikiを参照してください 。

カスタムヘッダーがプロキシブロックにdevice_id追加さproxy_pass_header device_id;れている場合。

(私のように)アンダースコアが含まれているカスタムヘッダーを使用している場合はunderscores_in_headers on、Nginx Configにあることを確認してください。


どうもありがとう !私は....あなたのポストは私を安心....私の髪を引っ張った
ファハドAhammed

1

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

Ex: authenticate_type, cdn_enable.

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

underscores_in_headers on;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.