nginx proxy_set_header Host $http_host 配置
阿新 • • 發佈:2019-02-08
nginx為了實現反向代理的需求而增加了一個ngx_http_proxy_module模組。其中proxy_set_header指令就是該模組需要讀取的配置檔案。在這裡,所有設定的值的含義和http請求同中的含義完全相同,除了Host外還有X-Forward-For。
Host的含義是表明請求的主機名,因為nginx作為反向代理使用,而如果後端真是的伺服器設定有類似防盜鏈或者根據http請求頭中的host欄位來進行路由或判斷功能的話,如果反向代理層的nginx不重寫請求頭中的host欄位,將會導致請求失敗【預設反向代理伺服器會向後端真實伺服器傳送請求,並且請求頭中的host欄位應為proxy_pass指令設定的伺服器】。
同理,X_Forward_For欄位表示該條http請求是有誰發起的?如果反向代理伺服器不重寫該請求頭的話,那麼後端真實伺服器在處理時會認為所有的請求都來在反向代理伺服器,如果後端有防攻擊策略的話,那麼機器就被封掉了。因此,在配置用作反向代理的nginx中一般會增加兩條配置,修改http的請求頭:
proxy_set_header Host $http_host;
proxy_set_header X-Forward-For $remote_addr;
這裡的$http_host和$remote_addr都是nginx的匯出變數,可以再配置檔案中直接使用。如果Host請求頭部沒有出現在請求頭中,則$http_host值為空,但是$host值為主域名。因此,一般而言,會用$host代替$http_host變數,從而避免http請求中丟失Host頭部的情況下Host不被重寫的失誤。
X-Forwarded-For:簡稱XFF頭,它代表客戶端,也就是HTTP的請求端真實的IP,只有在通過了HTTP 代理或者負載均衡伺服器時才會新增該項。 它不是RFC中定義的標準請求頭資訊,在squid快取代理伺服器開發文件中可以找到該項的詳細介紹。標準格式如下:X-Forwarded-For: client1, proxy1, proxy2。
這一HTTP頭一般格式如下: X-Forwarded-For: client1, proxy1, proxy2 其中的值通過一個 逗號+空格 把多個IP地址區分開, 最左邊(client1)是最原始客戶端的IP地址, 代理伺服器每成功收到一個請求,就把請求來源IP地址