django over https表单重定向问题

时间:2013-04-24 06:31:48

标签: django https django-admin

我正在使用Nginx + supervisord来托管SSL背后的django网站。网站索引加载正常。使用本地服务器在没有HTTPS的情况下本地一切正常。我正在使用Django 1.4.2

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

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

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

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

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

我注意到了这一点 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的新手。

1 个答案:

答案 0 :(得分: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运行的地方。

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