8

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

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

请注意,这似乎是一个相关的、未回答的问题:https://example.com/admin 在 Django Nginx 和 gunicorn 中重定向到 https://admin

4

3 回答 3

11

将以下内容添加到 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
于 2012-08-16T19:56:35.467 回答
2

以下应该是您将所有到管理应用程序的流量重定向到 https 所需的全部内容

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

如果这不起作用,您可以发布您的实际 nginx 配置位吗?如果没有您要查看的实际配置,真的无法提出更多建议。

于 2012-08-15T20:39:35.490 回答
0

Django 1.8 settings.py 的更新:

SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
SECURE_SSL_REDIRECT = True
SECURE_REDIRECT_EXEMPT = [r'^(?!admin/).*']

对于您的开发设备,您可能希望SECURE_SSL_REDIRECT = False在本地设置中覆盖。

于 2017-10-17T22:18:22.207 回答