如何使用带有gunicorn / nginx的SSL阻止重定向循环?

时间:2012-11-26 14:06:17

标签: django nginx gunicorn django-middleware

使用SSL中间件将某些网址重定向到HTTPS时,我获得了重定向循环。我该怎么办?

我的nginx配置设置为将请求转发给gunicorn。

2 个答案:

答案 0 :(得分:1)

这里有几个步骤。

首先,修改中间件检查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,即它是一个安全连接。

重新启动nginx,你就完成了。

答案 1 :(得分: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