我正在configuration一个Nginx服务器,以便作为一个反向代理服务一个Django应用程序(在Gunicorn上运行)。
我的问题是,我希望我的网站使用HTTPS进行保护,所以我希望我的Django应用程序能够确定连接是否安全。 我正在使用Django 1.4,所以我有权访问SECURE_PROXY_SSL_HEADER ,我将其configuration为SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTOCOL', 'https') 。
现在,正如文档中提到的那样,我需要确保Nginx只在需要的时候添加头部,并在不需要的时候去掉头部。 因为我希望我的Nginxconfiguration尽可能干,我宁愿没有两个configuration文件(一个用于端口80和一个用于端口443)。
因此,我想知道Nginx是否有办法确定连接是否为https,并相应地添加(或剥离)标题。
这个解决scheme没有描述如何仅在HTTP上剥离标题,正如问题标题中所述。
你的问题的一个安全的解决scheme是添加
proxy_set_header X-Forwarded-Protocol $scheme;
它将在HTTP请求上将X-Forwarded-Protocol为http ,在HTTPS请求上将HTTPS设置为https 。
这可以确保如果客户端设置了该标头,则按照https://docs.djangoproject.com/en/1.4/ref/settings/#secure-proxy-ssl-header的要求重新设置该标头。
注意:如果您正在共享您的Django项目,请确保在settings.py中包含SECURE_PROXY_SSL_HEADER情况settings.py ,充分警告用户,最好在默认情况下注释掉它。