nginxの背後にあるサーバーから受信した応答のカスタムヘッダーを追加したいと思います。
一方でadd_header
時にnginxの処理応答のための作品、それは何もしませんproxy_pass
使用されています。
回答:
ヘッダーをより詳細に制御できるHttpHeadersMoreModuleというモジュールがあります。Nginxには付属しておらず、追加のインストールが必要です。これで、次のようなことができます。
location ... {
more_set_headers "Server: my_server";
}
これにより、「サーバーの出力ヘッダーにステータスコードとコンテンツタイプのカスタム値が設定されます」。すでに設定されているヘッダーを置き換えるか、設定されていない場合は追加します。
Secure
とHttpOnly
フラグに応答クッキー?ただし、ターゲット応答CookieにはCookie と属性のみが含まれます。name
expire
add_header
でも動作します proxy_pass
なし。今日、まさにそのディレクティブを使用した構成をセットアップしました。しかし、理由を正確に思い出すことなくこれを設定するのに苦労したことは認めざるを得ません。
現在、私は動作する設定をしており、それは(とりわけ)以下を含みます:
server {
server_name .myserver.com
location / {
proxy_pass http://mybackend;
add_header X-Upstream $upstream_addr;
}
}
nginx以前は、セバスチャングッドマンが彼の回答で述べたHttpHeadersMoreModuleとは対照的に、1.7.5
add_headerは成功した応答のみに取り組みました。
nginxから1.7.5
、キーワードalways
を使用して、エラー応答にカスタムヘッダーを含めることができます。例えば:
add_header X-Upstream $upstream_addr always;
制限:server
を使用してヘッダー値を上書きすることはできませんadd_header
。
add_header X-Upstream $upstream_addr always;
X-Upstream: 10.10.10.10
vs X-Upstream: 53c2d28edefdf501ab7c92e02a0c1687
(md5はおそらくインフラストラクチャのマスキングには役立ちませんが、アイデアを伝えます)。
add_header
ディレクティブの使用例にすぎません。それらを送信する必要はありません。
オリバーが書いているように:
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;
location / { proxy_pass http://127.0.0.1:8080/; proxy_hide_header "Access-Control-Allow-Origin"; if ($http_origin ~* "^https://(example.com|www.example.com)$") { add_header Access-Control-Allow-Origin "$http_origin"; } }
ヘッダーの追加は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
は、リクエストがさらに送信される前にリクエストヘッダーを設定するためのものであり、レスポンスヘッダーを設定するためのものではありません(これらのヘッダーの構成属性は少しわかりにくい場合があります)。