我们正在为基于Django的应用程序使用Ngnix + uWSGI设置。
我们的问题是request.is_secure()
始终返回 false ,即使我们在https上提供内容也是如此。
如uWSGI文档中所述,我在nginx配置或uwsgi_params中设置了uwsgi_param UWSGI_SCHEME $scheme
,但没有用。
我们也为同一个应用程序设置了基于Nginx + apache的设置,它运行得很好。
任何帮助将不胜感激。
提前致谢。
答案 0 :(得分:5)
问题解决了!!
我们尝试了很多东西来修复它但却无法正常工作。 我将在此处提供有关我们稍后分析的问题的更多信息。 我们目前关于webfaction的设置如下:
WebFaction Nginx - >我们的nginix - > uwsgi服务器
我们发现webfaction nginx的配置存在一些问题,它将(https和http)的所有流量传递给http协议本身的nginx。首先,我们更改了此设置,以将正确的流量传递给正确的服务器。
我们仍然发现两个nginx服务器设置的$ scheme都不正确,所以我们最终做的是在我们的nginx中为https配置设置以下内容:
uwsgi_param UWSGI_SCHEME https;
这解决了现在的问题。
答案 1 :(得分:2)
我有半天的地狱修复这个问题,所以让每个人都头疼
首先,
设置
uwsgi_param HTTP_X_FORWARDED_PROTO $scheme;
在nginx.conf中
然后将此行放入settings.py
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
如果您使用的是Django< 1.4,那么您还需要启用django-secure
中间件
答案 2 :(得分:1)
是https终止符的nginx,还是之前有其他服务器?
在这种情况下,nginx中的$ scheme变量将始终映射到'http'。您必须手动将其设置为“https”
uwsgi_param UWSGI_SCHEME https;
答案 3 :(得分:0)
我建议使用request.scheme
代替request.is_secure()
来检查我们当前是否使用https
协议。
答案 4 :(得分:0)
对于固定为gunicorn
的服务器:
将此行添加到nginx.conf
文件中:
proxy_set_header X-Forwarded-Proto $scheme;
并将此行添加到settings.py
文件中:
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')