6

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

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

uWSGI文档中提到过,我uwsgi_param UWSGI_SCHEME $scheme在nginx配置或者uwsgi_params中设置了,但是没有用。

我们还为同一应用程序提供了基于 Nginx + apache 的设置,它工作得很好。

任何帮助将不胜感激。

提前致谢。

4

5 回答 5

6

问题解决了 !!

我们尝试了几件事来修复它,但无法让它工作。关于我们稍后分析的问题,我将在这里提供更多信息。我们当前在 webfaction 上的设置如下所示:

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

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

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

uwsgi_param UWSGI_SCHEME https;

这解决了现在的问题。

于 2012-07-12T11:50:51.537 回答
6

对于gunicorn服务器固定:

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

proxy_set_header        X-Forwarded-Proto           $scheme;

并将这一行添加到settings.py文件中:

SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
于 2019-04-27T14:38:08.703 回答
4

我花了半天的时间来解决这个问题,所以让每个人都头疼

首先,

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

于 2015-01-19T10:13:09.333 回答
3

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

于 2016-12-06T17:54:08.700 回答
1

is nginx the https terminator or you have some other server before it ?

In such a case the $scheme variable in nginx will always map to 'http'. You have to manually set it to 'https'

uwsgi_param UWSGI_SCHEME https;

于 2012-07-12T03:50:05.360 回答