nginxにHTTP_X_FORWARDED_PROTOヘッダーを転送させる方法は?


18

からセットアップをチェーンしています

nginx > apache/php

haproxy > nginx > apache/php

(sslサポートを組み込んだhaproxy 1.5-dev18を使用)

HTTP_X_FORWARDED_PROTOヘッダーを設定するために、nginxとhaproxyの両方が正しくセットアップされています。ただし、nginxはhaproxyからsslトラフィックを取得すると、接続をhttpとして認識し、ヘッダーをそのように設定します。

HTTP_X_FORWARDED_PROTOヘッダーが存在する場合、それを転送するようにnginxを設定し、それ以外の場合は接続に基づいて設定を続行するにはどうすればよいですか?

回答:


36

これを解決する方法を見つけました。問題は、nginxが私の設定のこの行でhaproxyによって設定されたヘッダーを上書きしていたことでした:

proxy_set_header X-Forwarded-Proto $scheme;

これを追加して修正しました:

map $http_x_forwarded_proto $thescheme {
     default $scheme;
     https https;
 }   

新しいスキームを使用するようにproxy_set_header行を変更します。

proxy_set_header X-Forwarded-Proto $thescheme;

何かが足りない場合を除き、前と後のproxy_set_header行は同じです。
ウィルフレッドヒューズ

1
$scheme$thescheme
アーレンベイラー

これはまれなケースでは安全ではありませんか?WebブラウザがHTTPリクエストをhaproxyに送信し、haproxyがHTTPSリクエストをNginxに送信すると、実際にはリクエストがhaproxyになりますが、HTTPS default $schemeに設定さ$theschemeれるケースが発生します。—それを回避するために、次のことはどうdefault $http_x_forwarded_proto; '' $scheme;でしょうか。したがって、haproxyがHTTPと言った場合、それは尊重されます。
-KajMagnus

それはここで提案されています:stackoverflow.com/a/21911864/694469(ie default $http_x_forwarded_proto;)。
-KajMagnus

2

AWS ELBでも同じニーズがありました

これが私の解法です。

proxy_set_header        X-Forwarded-Proto $http_x_forwarded_proto;

$http_x_forwarded_protoどこかに設定する必要がありますか?それは何ですか?
ジョナサン

developer.mozilla.org/en-US/docs/Web/HTTP/Headers/…$ http_x_forwarded_protoはNGINX実装です
-jobwat

2
あなたは、私が3日間hammerり続けてきた問題を解決したばかりだと答えます!httpsアドボケートproxy_set_header X-Forwarded-Proto $scheme;を使用したawsロードバランサーに関する他のすべての投稿は機能しません
MikeMarsian

1

コメントすることはできないので、これを回答として投稿します。nginxの設定の一部または全部を教えてください。おそらくあなたのHAProxy設定も?

私が考えることができる最初の問題は、HAProxyがSSL終了を行っていることです。要約すると、バックエンドサーバーをオフロードするには、ロードバランサーを設定して、すべてのSSLを実行し、HTTPでバックエンドサーバーと通信します。ここのスキームのように:http : //blog.exceliance.fr/2012/09/10/how-to-get-ssl-with-haproxy-getting-rid-of-stunnel-stud-nginx-or-pound/

あなたの質問に良い答えを与えるために、http <> https configにループバックの問題がないことを確認してもらえますか?たぶん、httpをhttpにリダイレクトし、httpsをhttpsにリダイレクトしてから、httpを強制的にhttpsにリダイレクトできます。

HAProxy構成でSSLパススルーを有効にしたことも確認できますか?


問題を解決しましたか?
ヤンノビッチ

1
私はそれを考え出した。あなたの答えは直接助けにはなりませんでしたが、その2番目のリンクはそれを解決する方法を見つけるのに役立ちました。ありがとう。
エコーは、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.