當(dāng)前位置:首頁 > IT技術(shù) > Web編程 > 正文

nginx 之$proxy_host|$host|$http_host區(qū)別
2021-09-13 15:36:27

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

[云推官招募計(jì)劃]

推薦新用戶注冊并下單即可獲得現(xiàn)金獎勵(lì)
?上新

[免費(fèi)課程]

Python編程學(xué)習(xí)路徑
?上新

[免費(fèi)套餐]

1核2G 2核4G云服務(wù)器免費(fèi) 云數(shù)據(jù)庫0元試用
?熱銷

[開發(fā)利器]

開發(fā)者專享優(yōu)惠,解決研發(fā)效率、集成難題
?公告

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

proxy_set_header Host $proxy_host;

proxy_set_header Connection close;

?

nginx對于upstream默認(rèn)使用的是基于IP的轉(zhuǎn)發(fā),因此對于以下配置:

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;??

}??

}

?

當(dāng)匹配到/front時(shí),使用web處理,到upstream就匹配到abc.com,這里直接轉(zhuǎn)換成IP進(jìn)行轉(zhuǎn)發(fā)。假如abc.com是在另一臺nginx下配置的,ip為10.10.10.10,則$proxy_host則對應(yīng)為10.10.10.10。此時(shí)相當(dāng)于設(shè)置了Host為10.10.10.10。如果想讓Host是abc.com,則進(jìn)行如下設(shè)置:

proxy_set_header Host abc.com;

?

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

?proxy_set_header Host? $http_host;

?

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

?proxy_set_header Host? $host;

?

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

?proxy_set_header Host? ?$host:$proxy_port;

?

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

?proxy_set_header Accept-Encoding "";

?

本文摘自 :https://www.cnblogs.com/

開通會員,享受整站包年服務(wù)立即開通 >