在Nginx后面通过HTTPS访问Django Admin

时间:2012-08-13 23:01:56

标签: django redirect https nginx admin

我在dginx后面的uwsgi中运行了django。当我尝试访问https://site/admin/时,我得到了预期的登录屏幕。通过表单登录似乎成功,但是,我只是回到登录屏幕。 Firebug显示重定向到普通http://site/admin/网址,然后由nginx重定向到https网址。

帮助!我对如何强制管理员应用仅使用https网址感到困惑。

请注意,这似乎是一个相关的,未回答的问题:https://example.com/admin redirects to https://admin in Django Nginx and gunicorn

3 个答案:

答案 0 :(得分:10)

在nginx.conf中添加以下内容为我解决了这个问题。

location / {
    ...
    include                 uwsgi_params;
    uwsgi_param             HTTP_X_FORWARDED_PROTOCOL https;
    uwsgi_param             UWSGI_SCHEME   $scheme;
}

将以下内容添加到settings.py:

SESSION_COOKIE_SECURE = True
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTOCOL', 'https')
CSRF_COOKIE_SECURE = True

答案 1 :(得分:2)

以下 应该只需将管理员应用的所有流量重定向到 HTTPS

location /site/admin/ {
  rewrite ^ https://$host/$request_uri permanent;
}

如果这不起作用,你可以发布实际的nginx配置位吗?如果没有你的实际配置,那么无法真正建议更多。

答案 2 :(得分:0)

更新Django 1.8 settings.py:

removeIf

对于您的开发工具,您可能希望在本地设置中覆盖SESSION_COOKIE_SECURE = True CSRF_COOKIE_SECURE = True SECURE_SSL_REDIRECT = True SECURE_REDIRECT_EXEMPT = [r'^(?!admin/).*']