【问题标题】:request.is_secure() always returns false with uwsgi serverrequest.is_secure() 对于 uwsgi 服务器总是返回 false
【发布时间】: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 背后?

标签: django https nginx uwsgi


【解决方案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。不存在这样的问题
        猜你喜欢
        • 2011-08-05
        • 1970-01-01
        • 1970-01-01
        • 2016-07-06
        • 1970-01-01
        • 1970-01-01
        • 2020-04-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多