proxy_set_header 是 Nginx 配置中的一個重要指令,特別是在使用 Nginx 作為反向代理時。該指令允許你修改由 Nginx 傳遞給代理後端的請求頭。這對於確保後端應用程式能夠接收到正確的客戶端信息(如 IP 地址、主機名等)以及控制緩存行為等場景非常有用。 以下是 proxy_ ...
proxy_set_header
是 Nginx 配置中的一個重要指令,特別是在使用 Nginx 作為反向代理時。該指令允許你修改由 Nginx 傳遞給代理後端的請求頭。這對於確保後端應用程式能夠接收到正確的客戶端信息(如 IP 地址、主機名等)以及控制緩存行為等場景非常有用。
以下是 proxy_set_header
指令的一些常見用法和詳解:
-
設置 Host 頭:
當 Nginx 代理請求到後端伺服器時,預設情況下會保留原始的 Host 頭。但是,在某些情況下,你可能需要覆蓋這個值。nginx複製代碼 proxy_set_header Host $host;
這裡
$host
是 Nginx 變數,它包含了請求的主機名。 -
傳遞真實客戶端 IP:
當 Nginx 位於負載均衡器或 CDN 後面時,後端伺服器看到的客戶端 IP 可能是負載均衡器或 CDN 節點的 IP,而不是真實用戶的 IP。為瞭解決這個問題,你可以使用X-Real-IP
或X-Forwarded-For
頭來傳遞真實 IP。proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
$remote_addr
是客戶端的 IP 地址。$proxy_add_x_forwarded_for
是一個特殊的 Nginx 變數,它包含了原始請求的X-Forwarded-For
頭的內容,並附加上客戶端的 IP 地址。 -
控制緩存:
你可以通過修改或添加特定的頭來控制後端伺服器或中間緩存的行為。proxy_set_header Cache-Control "no-cache, no-store, must-revalidate"; proxy_set_header Pragma no-cache; proxy_set_header Expires 0;
這些頭通常用於確保請求不會被緩存,或者用於控制緩存的持續時間。
-
自定義頭:
除了修改標準 HTTP 頭之外,你還可以添加自定義頭來傳遞額外的信息給後端伺服器。nginx複製代碼 proxy_set_header My-Custom-Header "SomeValue";
-
刪除頭:
雖然proxy_set_header
主要用於添加或修改頭信息,但你也可以通過將其設置為空值來刪除不需要的頭。nginx複製代碼 proxy_set_header Accept-Encoding "";
這將刪除
Accept-Encoding
頭,可能是因為你不希望後端伺服器對內容進行壓縮。 -
條件性地設置頭:
結合 Nginx 的map
模塊,你可以根據條件來設置頭信息。例如,你可以創建一個映射來根據$http_user_agent
變數的值設置不同的頭。 -
註意安全性:
當使用proxy_set_header
時,要註意不要泄露敏感信息或允許未授權訪問。確保你瞭解每個設置的安全影響,並遵循最佳實踐來保護你的應用程式和數據。
在配置 proxy_set_header
時,請確保你的設置與後端伺服器的期望相匹配,併進行充分的測試以確保一切按預期工作。
本文來自博客園,作者:dashery,轉載請註明原文鏈接:https://www.cnblogs.com/ydswin/p/18058449