nginx-アップストリームサーバーからカスタムヘッダーを読み取ります


81

nginxをリバースプロキシとして使用していて、アップストリームサーバー(Apache)の応答からカスタムヘッダーを読み取ろうとしていますが、成功しません。Apacheの応答は次のとおりです。

HTTP/1.0 200 OK
Date: Fri, 14 Sep 2012 20:18:29 GMT 
Server: Apache/2.2.17 (Ubuntu)
X-Powered-By: PHP/5.3.5-1ubuntu7.10
Connection: close
Content-Type: application/json; charset=UTF-8
My-custom-header: 1

My-custom-headerから値を読み取り、それをif句で使用したいと思います。

location / {
    // ...
    // get My-custom-header value here
    // ...
}

これは可能ですか?前もって感謝します。

回答:


93

$ http _ name_of_the_header_key

つまりorigin = domain.com、ヘッダーにある場合は、$http_origindomain.com」を取得するために使用できます

nginxでは、任意のリクエストヘッダーフィールドをサポートしています。上記の例では、変数名の最後の部分は、ダッシュがアンダースコアに置き換えられた小文字に変換されたフィールド名です。

ここでドキュメントを参照してください:http//nginx.org/en/docs/http/ngx_http_core_module.html#var_http_

あなたの例では、変数はです$http_my_custom_header


3
実際、それは間違っているので、答えをマークするべきではありません。将来これに遭遇する人にとって、正しい変数は$http_です。例としてOPを使用します$http_my_custom_header(大文字と小文字が区別されます!)
jduncanator 2014年

ドキュメントに一致するようにこの回答を修正しました;)
Paul Dixon

14
結局のところ、これも正しくありません。OPは、応答ヘッダーの値を読み取るように要求しました。を使用する必要があります$sent_http_my_custom_headernginx.org/en/docs/http/ngx_http_core_module.html#var_sent_http_
ネイサン

アップストリーム応答ヘッダーが必要な場合は、以下の@ dev-gosainの回答を確認してください
filimonov 2015

14
答えは間違っています。質問している人は、アップストリームサーバーからヘッダーにアクセスしようとしています。正しい答えはstackoverflow.com/a/30879181/111995
geekQ

50

私は同じ問題に直面していました。私は両方を試してみました$http_my_custom_headerし、$sent_http_my_custom_headerそれは私のために動作しませんでした。

を使用してこの問題を解決しましたが$upstream_http_my_custom_header


8

$ http_MY_CUSTOM_HEADERを使用します

あなたは何かを書くことができます-のようなもの

set my_header $http_MY_CUSTOM_HEADER;
if($my_header != 'some-value') {
#do some thing;
}

6
男は言う-変数名の最後の部分は、ダッシュがアンダースコアに置き換えられた小文字に変換されたフィールド名です。
Arjun Sreedharan 2015年

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