在 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 安全连接

Angular App 在 nginx 上运行并在附加的 nginx 反向代理后面

LNMP强制https访问

https的设置

如何配置nginx 只能通过域名访问