在 Nginx 后面通过 HTTPS 访问 Django Admin
Posted
技术标签:
【中文标题】在 Nginx 后面通过 HTTPS 访问 Django Admin【英文标题】:Accessing Django Admin over HTTPS behind Nginx 【发布时间】:2012-08-10 05:23:32 【问题描述】:我在 nginx 后面的 uwsgi 中运行了 django。当我尝试访问https://site/admin/
时,我得到了预期的登录屏幕。通过表单登录似乎成功了,但是,我最终回到了登录屏幕。 Firebug 显示重定向到普通的 http://site/admin/
url,然后由 nginx 重定向到 https url。
帮助!我对如何强制管理应用仅使用 https 网址感到困惑。
请注意,这似乎是一个相关的、未回答的问题:https://example.com/admin redirects to https://admin in Django Nginx and gunicorn
【问题讨论】:
【参考方案1】:将以下内容添加到 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
【讨论】:
如果使用proxy_pass
而不是 uwsgi,则在 nginx.conf 中使用 proxy_set_header X-Forwarded-Protocol $scheme
。【参考方案2】:
以下应该是您将所有到管理应用程序的流量重定向到 https
location /site/admin/
rewrite ^ https://$host/$request_uri permanent;
如果这不起作用,您可以发布您的实际 nginx 配置位吗?如果没有您要查看的实际配置,真的无法提出更多建议。
【讨论】:
好主意,虽然我最终让它以不同的方式工作。 不适用于 POST 请求。特别是对于任何 API 回调。【参考方案3】: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
。
【讨论】:
以上是关于在 Nginx 后面通过 HTTPS 访问 Django Admin的主要内容,如果未能解决你的问题,请参考以下文章
Nginx 后面的 Keycloak 管理控制台配置为使用 HTTPS
NGINX 后面的 FastCGI 应用程序无法检测到使用了 HTTPS 安全连接