Nginx
Nginx :在 HTTP 上去除標頭,在 HTTPS 上添加標頭
我正在配置 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,並相應地添加(或剝離)標頭。
如問題標題中所述,此解決方案未描述如何僅在 HTTP 上剝離標頭。
您的問題的安全解決方案是添加
proxy_set_header X-Forwarded-Protocol $scheme;
它將設置
X-Forwarded-Protocol
為http
HTTP 請求和https
HTTPS 請求。如果客戶端設置它,這將確保覆蓋此標頭,如https://docs.djangoproject.com/en/1.4/ref/settings/#secure-proxy-ssl-header所要求的。
**注意:**如果您正在共享您的 Django 項目,請確保在包含
SECURE_PROXY_SSL_HEADER
in時充分警告使用者settings.py
,並最好預設將其註釋掉。