request.is_secure()始终使用uwsgi服务器返回false

时间:2012-07-11 21:32:59

标签: django https nginx uwsgi

我们正在为基于Django的应用程序使用Ngnix + uWSGI设置。

我们的问题是request.is_secure()始终返回 false ,即使我们在https上提供内容也是如此。

如uWSGI文档中所述,我在nginx配置或uwsgi_params中设置了uwsgi_param UWSGI_SCHEME $scheme,但没有用。

我们也为同一个应用程序设置了基于Nginx + apache的设置,它运行得很好。

任何帮助将不胜感激。

提前致谢。

5 个答案:

答案 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')