3

SSL ミドルウェアを使用して特定の URL を HTTPS にリダイレクトすると、リダイレクト ループが発生します。私は何をすべきか?

私のnginx構成は、リクエストをgunicornに転送するように設定されています。

4

2 に答える 2

3

ここにはいくつかのステップがあります。

まず、ミドルウェアが 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_headerssl_protocolがnull でない場合、つまり安全な接続である場合にのみ渡されます。

nginx を再起動して完了です。

于 2012-11-26T14:06:17.370 に答える
0

トムの答えに追加します。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
于 2014-03-31T18:41:23.570 に答える