詳解nginx?中l(wèi)ocation和?proxy_pass的匹配規(guī)則
我來(lái)詳細(xì)解釋 location
和 proxy_pass
的作用以及它們?cè)谀愕睦又械暮x。
location 的作用
location
是 Nginx 中用來(lái)匹配客戶端請(qǐng)求 URI 的指令,決定如何處理特定路徑的請(qǐng)求。它定義了請(qǐng)求的路由規(guī)則,后續(xù)的配置(如 proxy_pass
)會(huì)應(yīng)用在匹配的請(qǐng)求上。
語(yǔ)法
location [修飾符] 匹配模式 { # 配置塊 }
- 修飾符:可選,比如
=
(精確匹配)、~
(正則匹配)等。 - 匹配模式:可以是具體路徑、正則表達(dá)式等。
示例:location /test
location /test { proxy_pass http://abc.com; }
- 含義:
- 當(dāng)客戶端請(qǐng)求的 URI 以
/test
開(kāi)頭時(shí),這個(gè)location
塊會(huì)被匹配。 - 比如請(qǐng)求
http://yourdomain.com/test
或http://yourdomain.com/test/abc
都會(huì)進(jìn)入這個(gè)塊。
- 當(dāng)客戶端請(qǐng)求的 URI 以
- URI 處理:
- 默認(rèn)情況下,Nginx 會(huì)把請(qǐng)求的完整 URI(包括
/test
部分)傳遞給后端,除非proxy_pass
有特殊配置。
- 默認(rèn)情況下,Nginx 會(huì)把請(qǐng)求的完整 URI(包括
proxy_pass 的作用
proxy_pass
指定將請(qǐng)求代理到的后端服務(wù)器地址(可以是域名、IP 或上游服務(wù)器組)。它定義了請(qǐng)求的目標(biāo)。
語(yǔ)法
proxy_pass 協(xié)議://目標(biāo)地址;
示例:proxy_pass http://abc.com/tt
location /test { proxy_pass http://abc.com/tt; }
- 含義:
- 將匹配
location /test
的請(qǐng)求轉(zhuǎn)發(fā)到http://abc.com/tt
。 - 后端服務(wù)器會(huì)收到轉(zhuǎn)發(fā)的請(qǐng)求,具體 URI 取決于配置細(xì)節(jié)。
- 將匹配
結(jié)合 location /test 和 proxy_pass http://abc.com/tt
讓我解釋這倆組合起來(lái)的效果:
默認(rèn)行為(帶路徑替換)
location /test { proxy_pass http://abc.com/tt; }
- 客戶端請(qǐng)求:
http://yourdomain.com/test/abc
- 轉(zhuǎn)發(fā)到后端:
http://abc.com/tt/abc
- 解釋:
location /test
匹配請(qǐng)求的/test
前綴。- Nginx 會(huì)把
/test
后面的部分(/abc
)保留下來(lái)。 proxy_pass http://abc.com/tt
指定目標(biāo)地址為http://abc.com/tt
,并把剩余路徑(/abc
)追加到后面。- 最終后端收到的是
http://abc.com/tt/abc
。
加斜杠的效果(不替換路徑)
如果在 proxy_pass
后加斜杠:
location /test { proxy_pass http://abc.com/tt/; }
- 客戶端請(qǐng)求:
http://yourdomain.com/test/abc
- 轉(zhuǎn)發(fā)到后端:
http://abc.com/tt/abc
- 解釋:
- 加了斜杠
/
后,Nginx 不會(huì)把location
的/test
部分替換掉,而是直接把請(qǐng)求的剩余路徑(/abc
)追加到http://abc.com/tt/
后面。 - 結(jié)果和上面一樣,但邏輯更明確。
- 加了斜杠
不帶具體路徑
location /test { proxy_pass http://abc.com; }
- 客戶端請(qǐng)求:
http://yourdomain.com/test/abc
- 轉(zhuǎn)發(fā)到后端:
http://abc.com/test/abc
- 解釋:
- 因?yàn)?nbsp;
proxy_pass
沒(méi)有指定具體路徑(只有域名),Nginx 會(huì)把客戶端的完整 URI(/test/abc
)直接傳遞給后端。
- 因?yàn)?nbsp;
常見(jiàn)配置模式
- 精確匹配路徑:
location = /test { proxy_pass http://abc.com/tt; }
- 只匹配
http://yourdomain.com/test
,不會(huì)匹配/test/abc
。 - 轉(zhuǎn)發(fā)到
http://abc.com/tt
(不帶額外路徑)。
- 去掉前綴:
location /test/ { proxy_pass http://abc.com/; }
- 請(qǐng)求
http://yourdomain.com/test/abc
轉(zhuǎn)發(fā)到http://abc.com/abc
。 /test/
被去掉,只保留后面的部分。
- 正則匹配:
location ~ ^/test/(.*)$ { proxy_pass http://abc.com/tt/$1; }
- 請(qǐng)求
http://yourdomain.com/test/abc
轉(zhuǎn)發(fā)到http://abc.com/tt/abc
。 - 使用正則捕獲組
$1
動(dòng)態(tài)傳遞路徑。
總結(jié)
location /test
:匹配以/test
開(kāi)頭的請(qǐng)求。proxy_pass http://abc.com/tt
:將請(qǐng)求轉(zhuǎn)發(fā)到abc.com/tt
,默認(rèn)保留/test
后的路徑并追加到/tt
后。- 關(guān)鍵點(diǎn):是否加斜杠(
/
)、是否用正則,會(huì)影響路徑的傳遞方式。
到此這篇關(guān)于nginx `location` 和 `proxy_pass`的匹配規(guī)則的文章就介紹到這了,更多相關(guān)nginx location 和 proxy_pass匹配規(guī)則內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
nginx上部署react項(xiàng)目的實(shí)例方法
今天小編就為大家分享一篇關(guān)于nginx上部署react項(xiàng)目的實(shí)例方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-02-02利用nginx搭建靜態(tài)資源服務(wù)器的方法步驟
這篇文章主要介紹了利用nginx搭建靜態(tài)資源服務(wù)器的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06Nginx代理MySQL實(shí)現(xiàn)通過(guò)域名連接數(shù)據(jù)庫(kù)的詳細(xì)教程
我們的生產(chǎn)環(huán)境基本上都部署在云服務(wù)器上,例如應(yīng)用服務(wù)器、MySQL服務(wù)器等,如果MySQL服務(wù)器直接暴露在公網(wǎng),就會(huì)存在很大的風(fēng)險(xiǎn),為了保證數(shù)據(jù)安全,MySQL服務(wù)器的端口是不對(duì)外開(kāi)放的,所以本文介紹了Nginx代理MySQL實(shí)現(xiàn)通過(guò)域名連接數(shù)據(jù)庫(kù)的詳細(xì)教程2024-07-07Nginx+SSL實(shí)現(xiàn)雙向認(rèn)證的示例代碼
這篇文章主要介紹了Nginx+SSL實(shí)現(xiàn)雙向認(rèn)證的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-01-01Nginx搭建RTMP流媒體服務(wù)器的實(shí)現(xiàn)
本文主要介紹了Nginx搭建RTMP流媒體服務(wù)器的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07封80端口應(yīng)對(duì)策略 Nginx反向代理For WIN2003超級(jí)傻瓜式配置
封80應(yīng)對(duì)策略,Nginx反向代理ForWIN2003超級(jí)傻瓜式配置!2010-03-03centos7 docker 修改Nginx文件過(guò)程詳解
這篇文章主要介紹了centos7 docker 修改Nginx文件過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08前端開(kāi)發(fā)用得著的nginx配置(場(chǎng)景)
這篇文章主要介紹了前端開(kāi)發(fā)用得著的nginx配置,前端的工作過(guò)程里,本地開(kāi)發(fā)、提供測(cè)試環(huán)境,總得有個(gè)用著順手的服務(wù)器軟件,這個(gè)場(chǎng)景里nginx很流行,特分享下需要的朋友可以參考下2014-09-09