request.is_secure() 对于 uwsgi 服务器总是返回 false

Posted

技术标签:

【中文标题】request.is_secure() 对于 uwsgi 服务器总是返回 false【英文标题】:request.is_secure() always returns false with uwsgi server 【发布时间】:2012-07-11 14:42:31 【问题描述】:

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

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

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

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

任何帮助将不胜感激。

提前致谢。

【问题讨论】:

你在哪里设置uwsgi_param UWSGI_SCHEME $scheme; 远射:您在 AWS 上吗?具体来说,在 AWS 上的 ELB 背后? 【参考方案1】:

问题解决了!!

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

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

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

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

uwsgi_param UWSGI_SCHEME https;

这解决了现在的问题。

【讨论】:

【参考方案2】:

对于gunicorn 服务器固定为:

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

proxy_set_header        X-Forwarded-Proto           $scheme;

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

SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

【讨论】:

【参考方案3】:

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

首先,

设置

uwsgi_param   HTTP_X_FORWARDED_PROTO    $scheme;

在 nginx.conf 中

然后将这一行放到settings.py中

SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

如果您使用的是 Djangodjango-secure 中间件

【讨论】:

【参考方案4】:

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

【讨论】:

在使用 request.scheme 时需要小心谨慎,在许多情况下,https 连接会在负载均衡器级别终止。在负载均衡器之后,可能在内部它可能只使用 http 来传输数据。 查看主存储库 link 中的 Django 代码,它表明 codeis_secure()code 使用方案来检测它是否安全。【参考方案5】:

是 nginx 是 https 终结者,还是在它之前有其他服务器?

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

uwsgi_param UWSGI_SCHEME https;

【讨论】:

我们正在使用 webfaction,在我们的 nginx 之前有一个 webfaction nginx,它必须是 https 终止符。但是我们还有一个类似的设置,我们使用的是 nginx + apache。不存在这样的问题

以上是关于request.is_secure() 对于 uwsgi 服务器总是返回 false的主要内容,如果未能解决你的问题,请参考以下文章

格式化处理--二层字典格式

STM32示例中变量名开头的“uw”是啥意思?

nlohmann/json uWebsocket

如何使用 uWS 访问 HTTP 请求的 IP 地址?

NGINX 后面的 FastCGI 应用程序无法检测到使用了 HTTPS 安全连接

蛙跳算法怎么计算各个青蛙的适应值