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に確認する方法があるかどうかを知り、それに応じてヘッダーを追加(または削除)します。
このソリューションはnotを実行して、HTTPでのみヘッダーを削除する方法を説明します。質問のタイトルで尋ねられます。
あなたの問題に対する安全な解決策は追加することです
proxy_set_header X-Forwarded-Protocol $scheme;
HTTPリクエストではX-Forwarded-Protocol
をhttp
に設定し、HTTPSリクエストではhttps
に設定します。
https://docs.djangoproject.com/en/1.4/ref/settings/#secure-proxy-ssl-header によって要求されるように、クライアントが設定した場合、これによりこのヘッダーが確実に上書きされます。 。
注: Djangoプロジェクトを共有している場合、SECURE_PROXY_SSL_HEADER
をsettings.py
に含める場合は、このことをユーザーに十分に警告してください。 、デフォルトでコメントアウトするのが最善です。