web-dev-qa-db-ja.com

nginxプロキシサーバーからリクエストヘッダーを転送する

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」を使用しようとしましたが、ヘッダーが応答にさえ渡されませんでした。

ここで何が欠けていますか?

53
Peleg

プロキシバックエンドに変数を渡す場合は、プロキシモジュールで変数を設定する必要があります。

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;
}

そして今、それはプロキシバックエンドに渡されます。

87
Fleshgrinder

問題は、「_」アンダースコアがヘッダー属性で有効ではないことです。アンダースコアの削除がオプションではない場合、サーバーブロックに追加できます。

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アプリはヘッダーを表示しませんもはや。デバッグには時間がかかりました。

18
Peter Senna