外部で HTTPS を実行し、内部で HTTP を実行するリバース プロキシがあります。
これは、デフォルトで、アプリ内 URL のスキームとして HTTP が使用されることを意味します。
プロキシは、HTTPS を使用する必要があることをバックエンドにどのように伝えることができますか?
外部で HTTPS を実行し、内部で HTTP を実行するリバース プロキシがあります。
これは、デフォルトで、アプリ内 URL のスキームとして HTTP が使用されることを意味します。
プロキシは、HTTPS を使用する必要があることをバックエンドにどのように伝えることができますか?
プロキシは、受信してバックエンドに渡すリクエストにヘッダーを追加 (または上書き) できます。これらは、バックエンドに情報を伝達するために使用できます。
これまでのところ、URL スキームで https の使用を強制するために使用されるカップルを見てきました。
X-Forwarded-Protocol: https
X-Forwarded-Ssl: on
X-Url-Scheme: https
また、ウィキペディアには次のようにも言及されています。
# 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.
それらをすべて設定するか、機能するものを設定して他の既知のものを削除するのが最善だと思います。悪意のあるクライアントがそれらをいじるのを防ぐため。
私の環境の魔法の設定を見つけるのに数時間のグーグル検索が必要でした。jetty アプリケーション サーバーと apache2 http サーバーの前に SSL httpd Apache リバース プロキシがあります。この回答は、実際に機能する情報を提供してくれました。私にとって、追加:
RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
応答でリンクを構築するときに、宛先が http の代わりに https をプロトコルとして使用するには、サイトの conf ファイルに追加するだけで十分でした。上記を試してみましたX-FORWARDED-PROTOCOL
が、うまくいきませんでした。これが将来のGoogle検索に役立つことを願っています!