【问题标题】:django over https form redirection issuesdjango over https 表单重定向问题
【发布时间】:2013-04-17 14:05:20
【问题描述】:

我正在使用 Nginx + supervisord 在 SSL 后面托管一个 django 站点。站点索引加载正常。没有使用本地服务器的 HTTPS,本地一切都可以正常工作。我正在使用 Django 1.4.2

由于某种原因,我得到了奇怪的重定向。

使用管理员时,如果我编辑任何项目,我会被重定向到主页。 提交新项目进行保存时,我得到 404(但数据已保存)。

非管理员: 再次提交表单将我返回到主页而不是“成功”。

我可以解释访问主页的原因。我的 nginx 使用 301 重定向将所有非 http 流量重定向到 https://localhost。所以我猜 django 并不认为我需要安全的 URL。

问题是 django 没有假设安全 url 或者更确切地说 request.is_secure 为假。

我已经注意到了这个 Accessing Django Admin over HTTPS behind Nginx 对代理通行证进行了更改,我认为它不会做任何事情来处理这个问题。但这里就是这样。

settings.py

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

警告:我对 django 还很陌生。

【问题讨论】:

    标签: django https django-admin


    【解决方案1】:

    我删除了 Nginx 重定向。 Django 已经正确处理了重定向。 这是我与 nginx 代理通行证一起使用的 settings.py 值

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

    Nginx 代理

     location / {
            proxy_pass_header Server;
            proxy_set_header Host $http_host;
            proxy_redirect off;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Scheme $scheme;
            proxy_set_header X-Forwarded-Protocol $scheme;
            proxy_connect_timeout 10;
            proxy_read_timeout 10;
            proxy_pass http://localhost:8000/;
        }
    

    localhost:8000 是 gunicorn 运行的地方。

    我还有其他问题,但重定向问题已解决。

    【讨论】:

    • 我们最近在一台机器上遇到了同样的问题。我们将 nginx 与 fastcgi_pass 结合使用。将 fastcgi_param HTTPS 设置为开启;在该位置明确为我们做了诀窍。
    • @phi fastcgi 可能是使用 nginx 的更好方法,我赞成这样 googlers 可以将您的方法用于 fastcgi
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    • 2011-06-26
    • 2015-09-08
    • 2018-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多