pan*_*d18 5 django https nginx uwsgi
我们正在为基于Django的应用程序使用Ngnix + uWSGI设置.
我们的问题是,即使我们在https上提供内容,也request.is_secure()始终返回false.
正如uWSGI文档中所提到的,我已经设置uwsgi_param UWSGI_SCHEME $scheme了nginx配置或uwsgi_params,但它没有用.
我们也为同一个应用程序设置了基于Nginx + apache的设置,它运行得很好.
任何帮助将不胜感激.
提前致谢.
对于gunicorn服务器固定:
将此行添加到nginx.conf文件中:
proxy_set_header X-Forwarded-Proto $scheme;
Run Code Online (Sandbox Code Playgroud)
并将这一行添加到settings.py文件中:
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
Run Code Online (Sandbox Code Playgroud)
问题解决了 !!
我们尝试了几件事来解决它,但无法使其正常工作.我将在此处提供有关我们稍后分析的问题的更多信息.我们目前在webfaction上的设置如下所示:
WebFaction Nginx - >我们的nginix - > uwsgi服务器
我们发现webfaction nginx的配置存在一些问题,它将(https和http)的所有流量传递给http协议本身的nginx.首先,我们更改了此设置,以将正确的流量传递给正确的服务器.
我们仍然发现两个nginx服务器设置的$ scheme都不正确,所以我们最终做的是在我们的nginx中为https配置设置以下内容:
uwsgi_param UWSGI_SCHEME https;
Run Code Online (Sandbox Code Playgroud)
这解决了现在的问题.
我花了半天的时间解决这个问题,所以免去了大家的头痛
首先,
放
uwsgi_param HTTP_X_FORWARDED_PROTO $scheme;
Run Code Online (Sandbox Code Playgroud)
在 nginx.conf 中
然后将此行放入settings.py中
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
Run Code Online (Sandbox Code Playgroud)
如果您使用的是 Django<1.4,您还需要启用django-secure中间件
nginx 是 https 终结者还是您之前有其他服务器?
在这种情况下,nginx 中的 $scheme 变量将始终映射到“http”。您必须手动将其设置为“https”
uwsgi_param UWSGI_SCHEME https;