Nginxをプロキシとして使用して、アプリケーションへのリクエストをフィルタリングしています。 「http_geoip_module」の助けを借りて、国コードhttp-headerを作成しています。「headers-more-nginx-module」を使用してリクエストヘッダーとして渡したいと思います。これは、Nginx設定のロケーションブロックです。
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アプリはヘッダーを表示しませんもはや。デバッグには時間がかかりました。