Nginx?Location匹配規(guī)則的具體使用
1. 語法基礎(chǔ)
Nginx 的 location 指令的基本語法如下:
location [=|~|~*|^~|@] uri { ... }
=表示精確匹配。~表示區(qū)分大小寫的正則匹配。~*表示不區(qū)分大小寫的正則匹配。^~表示非正則匹配,如果該選項(xiàng)匹配,則不再進(jìn)行正則匹配。( ^ 表示“非”,~ 表示“正則”,字符意思是:不會(huì)繼續(xù)匹配正則)@定義一個(gè)命名的 location,通常用于內(nèi)部重定向。
2. 匹配規(guī)則
Nginx 對(duì)多個(gè) location 的匹配遵循一定的規(guī)則和優(yōu)先級(jí)。當(dāng) Nginx 收到一個(gè)請(qǐng)求時(shí),它會(huì)按照以下順序進(jìn)行匹配

2.1 精確匹配(=)
優(yōu)先級(jí)最高。當(dāng)請(qǐng)求的URI與location后面的字符串完全相同時(shí),Nginx會(huì)選擇這個(gè)location塊進(jìn)行處理。(這個(gè)好理解,就是路徑完全匹配,一模一樣,優(yōu)先級(jí)最高)
示例:
location = /favicon.ico {
# 處理/favicon.ico的請(qǐng)求
}
只有當(dāng)請(qǐng)求URI嚴(yán)格為/favicon.ico時(shí),上述location塊才會(huì)被使用。
2.2. 最長前綴匹配(^~)
以^~開頭的location表示最長前綴匹配。如果請(qǐng)求的URI以某個(gè)location后面的字符串開頭,并且這個(gè)字符串是最長的(或者使用了^~修飾符),Nginx會(huì)選擇這個(gè)location塊。但請(qǐng)注意,^~修飾符實(shí)際上會(huì)停止后續(xù)的正則匹配搜索。(最長前綴匹配,意思就是以location后面的字符開始的且最長匹配,有的地方叫做非正則匹配,意思是滿足了最長前綴匹配,就不會(huì)再匹配正則匹配了,也可以理解為即滿足最長前綴匹配,也滿足正則匹配,就匹配最長前綴匹配,也就是所說的最長前綴匹配優(yōu)先級(jí)高于正則匹配,所謂的優(yōu)先級(jí)是兩者或多著都匹配的情況下,才會(huì)顯現(xiàn)優(yōu)先級(jí))
示例:
location ^~ /hello {
return 601;
}
location ^~ /hellow {
return 602;
}
location ^~ /hello/world {
return 603;
}
location ~ /hello {
return 604;
}
對(duì)于請(qǐng)求/hello,滿足 601和 604,實(shí)際返回601,就是因?yàn)閊~優(yōu)先級(jí)高于正則匹配;
對(duì)于請(qǐng)求/hellow,滿足 601和 602,實(shí)際返回602,因?yàn)樽铋L前綴匹配原則;


2.3. 正則表達(dá)式匹配(~和~*)
正則表達(dá)式匹配允許定義更復(fù)雜的URI匹配模式。~表示區(qū)分大小寫的正則匹配,而~*表示不區(qū)分大小寫的正則匹配。
Nginx會(huì)按照配置文件中的順序逐個(gè)檢查正則表達(dá)式location塊,直到找到第一個(gè)匹配的塊。因此,正則表達(dá)式的順序很重要。
示例:
location ~ \.(gif|jpg|png)$ {
# 處理以.gif、.jpg或.png結(jié)尾的請(qǐng)求(區(qū)分大小寫)
}
location ~* \.(GIF|JPG|PNG)$ {
# 處理以.GIF、.JPG或.PNG結(jié)尾的請(qǐng)求(不區(qū)分大小寫)
}
對(duì)于請(qǐng)求/images/photo.jpg,第一個(gè)location塊將被匹配(如果請(qǐng)求是區(qū)分大小寫的)。
2.4. 普通前綴匹配(無修飾符)
普通前綴匹配也按照配置文件中出現(xiàn)的先后順序進(jìn)行匹配,先出現(xiàn)的location指令優(yōu)先匹配。
示例:
location /hello {
return 601;
}
location /hellow {
return 602;
}
對(duì)于請(qǐng)求/hellow,滿足 601和 602,實(shí)際返回602,證明滿足長前綴匹配原則

再增加一項(xiàng)配置
```
location ~ /hello[a-z] {
return 603;
}
```
對(duì)于請(qǐng)求/hellow,滿足 601、 602和603,實(shí)際返回603,證明正則匹配優(yōu)先級(jí)高于普通匹配

2.5. 默認(rèn)匹配(/)
如果請(qǐng)求的URI與任何特定的location塊都不匹配,Nginx將使用默認(rèn)的location塊(如果有的話)。通常,默認(rèn)的location塊是一個(gè)不帶任何修飾符的location /塊。
示例:
location / {
# 處理所有其他請(qǐng)求
}
綜上所述
Nginx的location匹配規(guī)則優(yōu)先級(jí)可以總結(jié)為:
- 精確匹配(
=) - 最長前綴匹配(
^~),但會(huì)停止后續(xù)的正則匹配搜索 - 正則表達(dá)式匹配(
~和~*),按配置順序 - 普通前綴匹配(無修飾符),也按配置順序
- 默認(rèn)匹配(
/)
3. 注意事項(xiàng)
- 正則匹配與順序:正則
location的匹配順序很重要,因?yàn)?Nginx 會(huì)按照配置文件中定義的順序進(jìn)行匹配。 proxy_pass的路徑替換:在配置proxy_pass時(shí),需要注意location后面的 URI 是否包含斜杠(/),這會(huì)影響請(qǐng)求的轉(zhuǎn)發(fā)路徑。通常建議location和proxy_pass要么都加斜杠,要么都不加。- 性能優(yōu)化:將精確匹配放在前面,可以減少不必要的正則匹配,提高 Nginx 的處理效率。
4. 常見的正則符號(hào)
| 符號(hào) | 描述 | 示例 |
|---|---|---|
^ | 匹配字符串的開始位置 | ^http 匹配以"http"開頭的字符串 |
| $ | 匹配字符串的結(jié)束位置 | \.com$ 匹配以".com"結(jié)尾的字符串 |
. | 匹配除換行符以外的任意單個(gè)字符 | a.c 匹配"abc"、"a1c"等 |
* | 匹配前面的子表達(dá)式零次或多次 | ab*c 匹配"ac"、“abc”、"abbc"等 |
+ | 匹配前面的子表達(dá)式一次或多次 | ab+c 匹配"abc"、“abbc”、“abbbc"等,但不匹配"ac” |
? | 匹配前面的子表達(dá)式零次或一次 | ab?c 匹配"ac"、“abc” |
| | | 或匹配模式,匹配左邊的表達(dá)式或右邊的表達(dá)式 | (jpg|gif|png) 匹配"jpg"、“gif"或"png” |
\ | 轉(zhuǎn)義字符,用于匹配特殊字符 | \. 匹配"."字符本身 |
[ ] | 字符集合,匹配集合中的任意單個(gè)字符 | [a-z] 匹配任意小寫字母 |
[^ ] | 反向字符集合,匹配不在集合中的任意單個(gè)字符 | [^a-z] 匹配任意非小寫字母 |
{n} | n 是一個(gè)非負(fù)整數(shù),匹配確定的 n 次 | o{2} 匹配"oo" |
{n,} | n 是一個(gè)非負(fù)整數(shù),至少匹配 n 次 | o{2,} 匹配"oo"、“ooo”、"oooo"等 |
{n,m} | n 和 m 均為非負(fù)整數(shù),其中n <= m,匹配至少 n 次,但不超過 m 次 | o{2,4} 匹配"oo"、“ooo”、“oooo” |
到此這篇關(guān)于Nginx Location匹配規(guī)則的文章就介紹到這了,更多相關(guān)Nginx Location匹配規(guī)則內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Nginx負(fù)載均衡/SSL配置的實(shí)現(xiàn)
這篇文章主要介紹了Nginx負(fù)載均衡/SSL配置的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
服務(wù)器報(bào)錯(cuò)nginx?502?Bad?Gateway的原因及如何解決詳解
項(xiàng)目啟動(dòng)時(shí)莫名其妙網(wǎng)站訪問不了,502 Bad Gateway,下面這篇文章主要給大家介紹了關(guān)于服務(wù)器報(bào)錯(cuò)nginx?502?Bad?Gateway的原因及如何解決的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06
Nginx設(shè)置連接超時(shí)并進(jìn)行測(cè)試的方法步驟
在高并發(fā)場(chǎng)景下,如果客戶端與服務(wù)器的連接長時(shí)間未響應(yīng),會(huì)占用大量的系統(tǒng)資源,影響其他正常請(qǐng)求的處理效率,為了解決這個(gè)問題,可以通過設(shè)置?Nginx?的連接超時(shí)時(shí)間來優(yōu)化資源管理,提高服務(wù)器的穩(wěn)定性,以下是具體的配置方法和測(cè)試步驟,希望對(duì)你有所幫助2025-02-02
使用Nginx和內(nèi)網(wǎng)穿透實(shí)現(xiàn)多個(gè)本地Web站點(diǎn)的公網(wǎng)訪問過程
本文介紹了如何通過Nginx配置文件的修改結(jié)合內(nèi)網(wǎng)穿透技術(shù),實(shí)現(xiàn)將多個(gè)本地Web站點(diǎn)暴露到公網(wǎng),具體步驟包括安裝和配置Nginx,選擇內(nèi)網(wǎng)穿透工具,配置Nginx服務(wù)器塊以及啟動(dòng)Nginx服務(wù)2026-01-01
Nginx反向代理重寫URL的實(shí)現(xiàn)方案
nginx服務(wù)器代理前端項(xiàng)目,并且反代后端服務(wù)器,開發(fā)時(shí)使用沒有什么問題,部署后存在同樣請(qǐng)求根地址的情況,但是去調(diào)用后端接口就會(huì)出現(xiàn)報(bào)錯(cuò),最后通過重寫url解決問題,所以本文給大家介紹了Nginx反向代理重寫URL的實(shí)現(xiàn)方案,需要的朋友可以參考下2025-04-04
Nginx實(shí)現(xiàn)負(fù)載均衡的項(xiàng)目實(shí)踐
在我們實(shí)際生產(chǎn)中,一臺(tái)服務(wù)器的處理能力、存儲(chǔ)空間是有限的,這時(shí)候就需要負(fù)載均衡,本文詳細(xì)的介紹了Nginx實(shí)現(xiàn)負(fù)載均衡的項(xiàng)目實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下2022-03-03
nginx?反向代理負(fù)載均衡策略配置SSL訪問匹配規(guī)則優(yōu)先級(jí)
本文主要包含1.Nginx配置文件詳解2.Nginx實(shí)現(xiàn)負(fù)載均衡3.Nginx前端項(xiàng)目部署4.Nginx配置SSL訪問5.nginx匹配規(guī)則說明以及匹配的優(yōu)先級(jí)的內(nèi)容詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06

