Nginx

Nginx :在 HTTP 上去除標頭,在 HTTPS 上添加標頭

  • August 14, 2012

我正在配置 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-ProtocolhttpHTTP 請求和httpsHTTPS 請求。

如果客戶端設置它,這將確保覆蓋此標頭,如https://docs.djangoproject.com/en/1.4/ref/settings/#secure-proxy-ssl-header所要求的。


**注意:**如果您正在共享您的 Django 項目,請確保在包含SECURE_PROXY_SSL_HEADERin時充分警告使用者settings.py,並最好預設將其註釋掉。

引用自:https://serverfault.com/questions/386755