Nginx : 在 HTTP 上剥离标头,在 HTTPS 上添加标头

Tho*_*zco 7 ssl nginx proxy web-applications http-headers

我正在配置 Nginx 服务器,以便作为反向代理为 Django 应用程序(在 Gunicorn 上运行)提供服务。

我的问题是我希望我的网站使用 HTTPS 进行保护,因此我希望我的 Django 应用程序能够确定连接是否安全。我使用的是 Django 1.4,所以我可以访问SECURE_PROXY_SSL_HEADER我配置为SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTOCOL', 'https').

现在,正如文档中提到的,我需要确保 Nginx 仅在需要时添加标头,而在不需要时将其剥离。因为我希望我的 Nginx 配置尽可能 DRY,所以我不想有两个配置文件(一个用于端口 80,一个用于端口 443)。

因此,我想知道 Nginx 中是否有一种方法可以确定连接是否为 https,并相应地添加(或剥离)标头。

nh2*_*nh2 13

该解决方案并没有描述如何剥去只有HTTP头,因为问的问题标题。

您问题的安全解决方案是添加

proxy_set_header  X-Forwarded-Protocol  $scheme;
Run Code Online (Sandbox Code Playgroud)

它将在 HTTP 请求和HTTPS 请求上设置X-Forwarded-Protocol为。httphttps

这可确保在客户端设置时覆盖此标头,如https://docs.djangoproject.com/en/1.4/ref/settings/#secure-proxy-ssl-header 的要求。


注意:如果您正在共享您的 Django 项目,请确保在您包含SECURE_PROXY_SSL_HEADER在 中时充分警告用户这一点settings.py,并且默认情况下最好将其注释掉。