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

问题描述 投票:4回答:5

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

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

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

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

任何帮助将不胜感激。

提前致谢。

django https nginx uwsgi
5个回答
5
投票

问题解决了 !!

我们尝试了几件事来解决它,但无法使其正常工作。我将在此处提供有关我们稍后分析的问题的更多信息。我们目前在webfaction上的设置如下所示:

WebFaction Nginx - >我们的nginix - > uwsgi服务器

我们发现webfaction nginx的配置存在一些问题,它将(https和http)的所有流量传递给http协议本身的nginx。首先,我们更改了此设置,以将正确的流量传递给正确的服务器。

我们仍然发现两个nginx服务器设置的$ scheme都不正确,所以我们最终做的是在我们的nginx中为https配置设置以下内容:

uwsgi_param UWSGI_SCHEME https;

这解决了现在的问题。


3
投票

我有半天的地狱修复这个问题,所以让每个人都头疼

首先,

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中间件


1
投票

是nginx的https终结者还是你之前有其他服务器?

在这种情况下,nginx中的$ scheme变量将始终映射到'http'。您必须手动将其设置为“https”

uwsgi_param UWSGI_SCHEME https;


1
投票

对于gunicorn服务器固定:

将此行添加到nginx.conf文件:

proxy_set_header        X-Forwarded-Proto           $scheme;

并将此行添加到settings.py文件:

SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

0
投票

我建议使用request.scheme而不是request.is_secure()来检查我们目前是否使用https协议。

© www.soinside.com 2019 - 2024. All rights reserved.