SSL ミドルウェアを使用して特定の URL を HTTPS にリダイレクトすると、リダイレクト ループが発生します。私は何をすべきか?
私のnginx構成は、リクエストをgunicornに転送するように設定されています。
SSL ミドルウェアを使用して特定の URL を HTTPS にリダイレクトすると、リダイレクト ループが発生します。私は何をすべきか?
私のnginx構成は、リクエストをgunicornに転送するように設定されています。
ここにはいくつかのステップがあります。
まず、ミドルウェアが SSL をチェックする方法を変更します。
def _is_secure(self, request):
if request.is_secure():
return True
if 'HTTP_X_SSL_PROTOCOL' in request.META:
return True
return False
次に、nginx の設定を次のように変更します。
server {
listen 80;
listen 443 ssl;
...
location / {
...
proxy_set_header X-SSL-Protocol $ssl_protocol;
proxy_pass http://localhost:8000/;
}
}
proxy_set_header
ssl_protocol
がnull でない場合、つまり安全な接続である場合にのみ渡されます。
nginx を再起動して完了です。
トムの答えに追加します。Heroku または他のロード バランサーの背後にいる場合は、次の方法も役立ちます。
def _is_secure(self, request):
if request.is_secure():
return True
if 'HTTP_X_SSL_PROTOCOL' in request.META:
return True
# check the forwarded request's protocol
if request.META.get('HTTP_X_FORWARDED_PROTO')=='https':
return True
return False