Nginx location匹配模式與規(guī)則詳解
一、環(huán)境
Nginx 1.19
二、匹配模式
在 Nginx 的location指令里,常用的匹配模式有:
- 精準(zhǔn)模式(
=) - 前綴模式,不繼續(xù)匹配正則(
^~), - 前綴模式,繼續(xù)匹配正則,
- 正則模式,大小寫敏感(
~) - 正則模式,大小寫不敏感(
~*)
1. 精準(zhǔn)模式
location = /path {
default_type text/html;
return 200 'hello';
}2. 前綴模式(不繼續(xù)匹配正則)
location ^~ /path {
default_type text/html;
return 200 'hello';
}3. 前綴模式(繼續(xù)匹配正則)
location /path {
default_type text/html;
return 200 'hello';
}4. 正則模式(大小寫敏感)
location ~ /path {
default_type text/html;
return 200 'hello';
}5. 正則模式(大小寫不敏感)
location ~* /path {
default_type text/html;
return 200 'hello';
}Nginx會(huì)按照 精準(zhǔn)模式 -> 前綴模式 -> 正則模式 的順序來匹配。
精準(zhǔn)模式優(yōu)先級(jí)最高,匹配到后就不再繼續(xù)匹配其它模式。而前綴模式匹配到后,還要視乎指令的配置情況,來決定要不要繼續(xù)匹配正則模式。
三、需要注意的地方
1. 命中多個(gè)正則模式時(shí)的優(yōu)先級(jí)
看例子:
# 正則模式(大小寫敏感)
location ~ /a {
default_type text/html;
return 200 '111';
}
# 正則模式(大小寫敏感)
location ~ /a/b {
default_type text/html;
return 200 '222';
}如果訪問http://localhost/a/b,會(huì)命中哪個(gè)location?答案是第一個(gè)。
因?yàn)閮蓚€(gè)location都是正則模式(無論是否大小寫敏感),從上之下,哪個(gè)先匹配到就哪個(gè)負(fù)責(zé)處理。
2. 命中多個(gè)前綴模式時(shí)的優(yōu)先級(jí)
# 前綴模式(繼續(xù)匹配正則)
location /a {
default_type text/html;
return 200 '111';
}
# 前綴模式(繼續(xù)匹配正則)
location /a/b {
default_type text/html;
return 200 '222';
}- 訪問
http://localhost/a,命中第一個(gè); - 訪問
http://localhost/a/b,命中第二個(gè); - 訪問
http://localhost/a/b/c,命中第二個(gè);
簡(jiǎn)單來說,哪個(gè)location匹配到的字符串最長(zhǎng),就由哪個(gè)來處理,比如http://localhost/a/b/c能匹配到的最長(zhǎng)字符串是/a/b,所以由第二個(gè)location來處理。
前綴模式(不繼續(xù)匹配正則)也是同樣的匹配規(guī)則。
3. 命中多個(gè)不同模式時(shí)的優(yōu)先級(jí)
# 前綴模式(不繼續(xù)匹配正則)
location ^~ /a {
default_type text/html;
return 200 '111';
}
# 前綴模式(繼續(xù)匹配正則)
location /a/b {
default_type text/html;
return 200 '333';
}
# 正則模式(大小寫敏感)
location ~ /a/b {
default_type text/html;
return 200 '222';
}訪問http://localhost/a/b,會(huì)命中第三個(gè)location。
前面兩個(gè)location都是前綴模式,由匹配字符串最長(zhǎng)的處理(即第二個(gè))。第二個(gè)location沒有阻止繼續(xù)匹配正則,于是又繼續(xù)匹配第三個(gè)location(正則模式),所以最后是由第三個(gè)location處理。
4. 兩種前綴模式不能同時(shí)存在
看例子:
# 前綴模式(不繼續(xù)匹配正則)
location ^~ /a {
default_type text/html;
return 200 '333';
}
# 前綴模式(繼續(xù)匹配正則)
location /a {
default_type text/html;
return 200 '444';
}上面這段配置 Nginx 會(huì)報(bào)錯(cuò),因?yàn)?strong>在路徑相同的情況下,這兩種模式不能共存。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
一個(gè)等號(hào)引發(fā)的血案(談Nginx正確的404配置)
這篇文章主要介紹了Nginx正確的404配置方法,本文根據(jù)實(shí)際案例總結(jié)而來,可以說是一個(gè)等號(hào)引發(fā)的血案!需要的朋友可以參考下2014-08-08
Nginx Location指令URI匹配規(guī)則詳解小結(jié)
這篇文章主要介紹了Nginx Location指令URI匹配規(guī)則詳解小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
nginx https反向代理tomcat的2種實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于nginx https反向代理tomcat的2種實(shí)現(xiàn)方法,第一種方法是nginx配置https,tomcat也配置https,第二種方法是nginx采用https,tomcat采用http,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。2017-12-12
Nginx會(huì)話保持的具體實(shí)現(xiàn)
會(huì)話保持是指在會(huì)話持續(xù)或會(huì)話完成一個(gè)任務(wù)或一個(gè)事務(wù)的時(shí)間段內(nèi),將客戶端請(qǐng)求引導(dǎo)至同一個(gè)后端Web服務(wù)器或應(yīng)用服務(wù)器,本文主要介紹了Nginx會(huì)話保持的具體實(shí)現(xiàn),感興趣的可以了解一下2024-07-07
Nginx 域名轉(zhuǎn)發(fā)的實(shí)現(xiàn)
這篇文章主要介紹了Nginx 域名轉(zhuǎn)發(fā)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08

