Nginxをプロキシとして使い、アプリケーションへのリクエストをフィルタリングしています。quot;http_geoip_module"の助けを借りて、国コードhttp-headerを作成しており、quot;headers-more-nginx-module"でリクエストヘッダーとしてそれを渡したい。これはNginxの設定にあるlocationブロックです:
location / {
proxy_pass http://mysite.com;
proxy_set_header Host http://mysite.com;;
proxy_pass_request_headers on;
more_set_headers 'HTTP_Country-Code: $geoip_country_code';
}
しかし、これではレスポンスにヘッダーが設定されるだけです。more_set_headers"の代わりに"more_set_input_headers"を使ってみましたが、それではレスポンスにヘッダーが渡されることすらありませんでした。
何を見落としているのだろう?
プロキシバックエンドにこの変数を渡したい場合は、プロキシモジュールで設定する必要があります。
location / {
proxy_pass http://example.com;
proxy_set_header Host example.com;
proxy_set_header HTTP_Country-Code $geoip_country_code;
proxy_pass_request_headers on;
}
そして今、それはプロキシバックエンドに渡されます'。
問題は '_' アンダースコアがヘッダー属性で有効でないことです。アンダースコアを削除することができない場合は、サーバーブロックに追加することができます:
underscores_in_headers on;
これは基本的に@Fleshgrinderの回答に対する@kishorer747のコメントからのコピペで、解決策は以下から。https://serverfault.com/questions/586970/nginx-is-not-forwarding-a-header-value-when-using-proxy-pass/586997#586997
私の場合、nginxの後ろにあるアプリケーションは全く問題なく動作していたのですが、ngixが私のflaskアプリとクライアントの間に入った途端、私のflaskアプリがヘッダーを見なくなったのでここに書き加えました。デバッグに時間がかかりました。