web-dev-qa-db-ja.com

Nginx:HTTPでヘッダーを取り除き、HTTPSでヘッダーを追加

Djangoアプリ(Gunicornで実行))を提供するリバースプロキシとして機能するように、Nginxサーバーを構成しています。

私の問題は、自分のサイトをHTTPSで保護したいということです。したがって、Djangoアプリで、接続が安全かどうかを判断できるようにしたいと思います。Django 1.4なので、SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTOCOL', 'https')として構成したSECURE_PROXY_SSL_HEADERにアクセスできます。

さて、ドキュメントで言及されているように、私はNginxが必要な場合にのみヘッダーを追加し、そうでない場合はそれを取り除くことを確認する必要があります。私のNginx構成をDRYのようにしたいので、2つの構成ファイル(1つはポート80用、もう1つはポート443用)は使用しません)。

したがって、接続がhttpsであるかどうかをNginxに確認する方法があるかどうかを知り、それに応じてヘッダーを追加(または削除)します。

7
Thomas Orozco

このソリューションはnotを実行して、HTTPでのみヘッダーを削除する方法を説明します。質問のタイトルで尋ねられます。

あなたの問題に対する安全な解決策は追加することです

proxy_set_header  X-Forwarded-Protocol  $scheme;

HTTPリクエストではX-Forwarded-Protocolhttpに設定し、HTTPSリクエストではhttpsに設定します。

https://docs.djangoproject.com/en/1.4/ref/settings/#secure-proxy-ssl-header によって要求されるように、クライアントが設定した場合、これによりこのヘッダーが確実に上書きされます。 。


注: Djangoプロジェクトを共有している場合、SECURE_PROXY_SSL_HEADERsettings.pyに含める場合は、このことをユーザーに十分に警告してください。 、デフォルトでコメントアウトするのが最善です。

13
nh2