2013-04-24 46 views
3

我使用Nginx + supervisord在SSL后面托管一个django网站。网站索引加载正常。没有使用本地服务器的HTTPS,本地一切工作正常。我使用Django 1.4.2通过https形式的django表单重定向问题

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

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

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

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

问题是Django是不能假设的安全网址或者说 request.is_secure是假。

我已经注意到了这个SO 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

我删除了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运行。

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

+1

最近我们在机器上遇到了同样的问题。我们将nginx与fastcgi_pass结合使用。 设置fastcgi_param HTTPS;在位置明确地为我们做了诡计。 – phi 2016-07-11 12:17:11

+1

@phi fastcgi也许是更好的方式去与nginx和我upvoting所以谷歌可以使用你的方法fastcgi – Vangel 2016-07-17 11:17:55