nginx為了實(shí)現(xiàn)反向代理的需求而增加了一個(gè)ngx_http_proxy_module模塊,。其中proxy_set_header指令就是該模塊需要讀取的配置文件。在這里,,所有設(shè)置的值的含義和http請(qǐng)求同中的含義完全相同,,除了Host外還有X-Forward-For。 Host的含義是表明請(qǐng)求的主機(jī)名,,因?yàn)閚ginx作為反向代理使用,,而如果后端真是的服務(wù)器設(shè)置有類似防盜鏈或者根據(jù)http請(qǐng)求頭中的host字段來(lái)進(jìn)行路由或判斷功能的話,如果反向代理層的nginx不重寫請(qǐng)求頭中的host字段,,將會(huì)導(dǎo)致請(qǐng)求失敗【默認(rèn)反向代理服務(wù)器會(huì)向后端真實(shí)服務(wù)器發(fā)送請(qǐng)求,,并且請(qǐng)求頭中的host字段應(yīng)為proxy_pass指令設(shè)置的服務(wù)器】。 同理,,X_Forward_For字段表示該條http請(qǐng)求是有誰(shuí)發(fā)起的,?如果反向代理服務(wù)器不重寫該請(qǐng)求頭的話,那么后端真實(shí)服務(wù)器在處理時(shí)會(huì)認(rèn)為所有的請(qǐng)求都來(lái)在反向代理服務(wù)器,,如果后端有防攻擊策略的話,,那么機(jī)器就被封掉了。因此,,在配置用作反向代理的nginx中一般會(huì)增加兩條配置,,修改http的請(qǐng)求頭: proxy_set_header Host $http_host; proxy_set_header X-Forward-For $remote_addr; 這里的$http_host和$remote_addr都是nginx的導(dǎo)出變量,可以再配置文件中直接使用,。如果Host請(qǐng)求頭部沒(méi)有出現(xiàn)在請(qǐng)求頭中,,則$http_host值為空,但是$host值為主域名,。因此,,一般而言,會(huì)用$host代替$http_host變量,,從而避免http請(qǐng)求中丟失Host頭部的情況下Host不被重寫的失誤,。 |
|
來(lái)自: waitingnothing > 《Nginx》