web-dev-qa-db-ja.com

バックエンドSSLが使用されていることを通知するリバースプロキシの事実上の標準は何ですか?

外部でHTTPSを実行し、内部でHTTPを実行するリバースプロキシがあります。

これは、デフォルトではアプリ内URLがスキームとしてHTTPを使用することを意味します。これが連絡先の方法であるためです。

プロキシは、HTTPSを使用する必要があることをバックエンドにどのように伝えることができますか?

29
Chris Wesseling

プロキシは、受信したリクエストに追加の(または上書きする)ヘッダーを追加し、バックエンドに渡すことができます。これらは、情報をバックエンドに伝えるために使用できます。

これまでに、URLスキームでhttpsの使用を強制するために使用されるカップルを見てきました。

X-Forwarded-Protocol: https
X-Forwarded-Ssl: on
X-Url-Scheme: https

wikipedia も言及しています:

# a de facto standard:
X-Forwarded-Proto: https
# Non-standard header used by Microsoft applications and load-balancers:
Front-End-Https: on

これは、 Apache のVirtualHostに追加する必要があるものです。他のプロキシには同様の機能が必要です

RequestHeader set X-FORWARDED-PROTOCOL https
RequestHeader set X-Forwarded-Ssl on
# etc.

それらをすべて設定するか、動作するものを設定して他の既知のものを削除するのが最善だと思います。邪悪なクライアントが彼らをいじるのを防ぐため。

32
Chris Wesseling

自分の環境に合った魔法の設定を見つけるのに、数時間のグーグル検索が必要でした。 JettyアプリサーバーとApache2 httpサーバーの前にSSL httpd Apacheリバースプロキシがあります。この answer は、実際に機能する情報を提供してくれました。私にとって、RequestHeader set "X-Forwarded-Proto" expr =%{REQUEST_SCHEME}をサイトconfファイルに追加するだけで、宛先がhttpsを使用するのに十分でした。応答でリンクを作成するときにプロトコルとしてhttpの代わりに。上記のX-FORWARDED-PROTOCOLを試しましたが、うまくいきませんでした。これが今後のGoogle検索に役立つことを願っています。

0
Bryan