nginxの背後にあるサーバーから受信した応答のカスタムヘッダーを追加したいと思います。
add_header
nginxで処理された応答に対しては機能しますが、が使用されている場合は何もしませんproxy_pass
。
nginxの背後にあるサーバーから受信した応答のカスタムヘッダーを追加したいと思います。
add_header
nginxで処理された応答に対しては機能しますが、が使用されている場合は何もしませんproxy_pass
。
add_header
使用しても使用しない場合も同様に機能しproxy_pass
ます。私は今日、まさにそのディレクティブを使用した構成をセットアップしました。しかし、理由を正確に思い出さずにこれを設定するのにも苦労したことを認めなければなりません。
現在、動作している構成があり、次のものが含まれています(とりわけ):
server {
server_name .myserver.com
location / {
proxy_pass http://mybackend;
add_header X-Upstream $upstream_addr;
}
}
Nginxの前は、 1.7.5
add_headerは成功した応答でのみ機能していましたが、 SebastianGoodmanが彼の回答で言及したHttpHeadersMoreModuleとは対照的です。
nginx以降1.7.5
、このキーワードを使用しalways
て、エラー応答にもカスタムヘッダーを含めることができます。例えば:
add_header X-Upstream $upstream_addr always;
制限:server
を使用してヘッダー値をオーバーライドすることはできませんadd_header
。
でヘッダーを追加するadd_header
と、プロキシパスで正常に機能しますが、応答に既存のヘッダー値がある場合は、値がスタックされます。
ヘッダー値を設定または置換する場合(たとえば、Access-Control-Allow-Origin
オリジン間リソース共有を許可するためにクライアントに一致するようにヘッダーを置換する場合)、次のように実行できます。
# 1. hide the Access-Control-Allow-Origin from the server response
proxy_hide_header Access-Control-Allow-Origin;
# 2. add a new custom header that allows all * origins instead
add_header Access-Control-Allow-Origin *;
したがってproxy_hide_header
、と組み合わせるとadd_header
、応答ヘッダー値を設定/置換することができます。
同様の答えはここServerFaultで見つけることができます
注: proxy_set_header
これは、要求がさらに送信される前に要求ヘッダーを設定するためのものであり、応答ヘッダーを設定するためのものではありません(ヘッダーのこれらの構成属性は少し混乱する可能性があります)。
ヘッダーをより細かく制御できるHttpHeadersMoreModuleというモジュールがあります。Nginxには付属しておらず、追加のインストールが必要です。これを使用すると、次のようなことができます。
location ... {
more_set_headers "Server: my_server";
}
これにより、「サーバー出力ヘッダーが任意のステータスコードおよび任意のコンテンツタイプのカスタム値に設定されます」。すでに設定されているヘッダーを置き換えるか、設定されていない場合は追加します。
オリバーが書いているように:
add_header
使用しても使用しない場合も同様に機能しproxy_pass
ます。
ただし、Shaneが書いているように、Nginx 1.7.5の時点では、次のようにエラー応答を処理always
するために合格する必要があります。add_header
add_header X-Upstream $upstream_addr always;
あなたはこの解決策を試すことができます:
あなたlocation
が使用するときあなたのブロックproxy_pass
でこのようなことをしてください:
location ... {
add_header yourHeaderName yourValue;
proxy_pass xxxx://xxx_my_proxy_addr_xxx;
# Now use this solution:
proxy_ignore_headers yourHeaderName // but set by proxy
# Or if above didn't work maybe this:
proxy_hide_header yourHeaderName // but set by proxy
}
正確に必要なものかどうかはわかりませんが、このメソッドを操作してみてください。結果が問題に合う可能性があります。
また、この組み合わせを使用できます。
proxy_hide_header headerSetByProxy;
set $sent_http_header_set_by_proxy yourValue;