3

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

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

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

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

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

问题是 django 没有假设安全 url 或者 request.is_secure 是 False。

我已经注意到这个 SO Accessing Django Admin over HTTPS behind Nginx Made the changes for proxy pass,我认为它没有做任何事情来处理这个问题。但这里就是这样。

设置.py

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

警告:我对 Django 相当陌生。

4

1 回答 1

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 运行的位置。

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

于 2013-04-25T16:03:44.440 回答