nginx 之$proxy_host|$host|$http_host區別


作者:gyj110  時間: 2021-02-05 08:52:01
【摘要】proxy_set_header 允許重新定義或者添加發往后端服務器的請求頭。value可以包含文本、變量或者它們的組合。 當且僅當當前配置級別中沒有定義proxy_set_header指令時,會從上面的級別繼承配置。 默認情況下,只有兩個請求頭會被重新定義:proxy_set_header Host $proxy_host;proxy_set_header Connection close...

[雲推官招募計划]

推薦新用戶注冊並下單即可獲得現金獎勵
 上新

[免費課程]

Python編程學習路徑
 上新

[免費套餐]

1核2G 2核4G雲服務器免費 雲數據庫0元試用
 熱銷

[開發利器]

開發者專享優惠,解決研發效率、集成難題
 公告

proxy_set_header 允許重新定義或者添加發往后端服務器的請求頭。value可以包含文本、變量或者它們的組合。 當且僅當當前配置級別中沒有定義proxy_set_header指令時,會從上面的級別繼承配置。 默認情況下,只有兩個請求頭會被重新定義:

proxy_set_header Host $proxy_host;

proxy_set_header Connection close;

 

nginx對於upstream默認使用的是基於IP的轉發,因此對於以下配置:

upstream web {  

server abc.com;  

}  

server {  

listen 80;  

server_name   www.hehe.com;  

 

location /front {  

proxy_pass http://web;  

proxy_set_header Host $proxy_host;  

}  

}

 

當匹配到/front時,使用web處理,到upstream就匹配到abc.com,這里直接轉換成IP進行轉發。假如abc.com是在另一台nginx下配置的,ip為10.10.10.10,則$proxy_host則對應為10.10.10.10。此時相當於設置了Host為10.10.10.10。如果想讓Host是abc.com,則進行如下設置:

proxy_set_header Host abc.com;

 

如果不想改變請求頭“Host”的值,可以這樣來設置:

 proxy_set_header Host  $http_host;

 

但是,如果客戶端請求頭中沒有攜帶這個頭部,那么傳遞到后端服務器的請求也不含這個頭部。 這種情況下,更好的方式是使用$host變量——它的值在請求包含“Host”請求頭時為“Host”字段的值,在請求未攜帶“Host”請求頭時為虛擬主機的主域名:

 proxy_set_header Host  $host;

 

此外,服務器名可以和后端服務器的端口一起傳送:

 proxy_set_header Host   $host:$proxy_port;

 

如果某個請求頭的值為空,那么這個請求頭將不會傳送給后端服務器:

 proxy_set_header Accept-Encoding "";

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM