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會按照 精準(zhǔn)模式 -> 前綴模式 -> 正則模式 的順序來匹配。
精準(zhǔn)模式優(yōu)先級最高,匹配到后就不再繼續(xù)匹配其它模式。而前綴模式匹配到后,還要視乎指令的配置情況,來決定要不要繼續(xù)匹配正則模式。
三、需要注意的地方
1. 命中多個正則模式時的優(yōu)先級
看例子:
# 正則模式(大小寫敏感)
location ~ /a {
default_type text/html;
return 200 '111';
}
# 正則模式(大小寫敏感)
location ~ /a/b {
default_type text/html;
return 200 '222';
}如果訪問http://localhost/a/b,會命中哪個location?答案是第一個。
因為兩個location都是正則模式(無論是否大小寫敏感),從上之下,哪個先匹配到就哪個負(fù)責(zé)處理。
2. 命中多個前綴模式時的優(yōu)先級
# 前綴模式(繼續(xù)匹配正則)
location /a {
default_type text/html;
return 200 '111';
}
# 前綴模式(繼續(xù)匹配正則)
location /a/b {
default_type text/html;
return 200 '222';
}- 訪問
http://localhost/a,命中第一個; - 訪問
http://localhost/a/b,命中第二個; - 訪問
http://localhost/a/b/c,命中第二個;
簡單來說,哪個location匹配到的字符串最長,就由哪個來處理,比如http://localhost/a/b/c能匹配到的最長字符串是/a/b,所以由第二個location來處理。
前綴模式(不繼續(xù)匹配正則)也是同樣的匹配規(guī)則。
3. 命中多個不同模式時的優(yōu)先級
# 前綴模式(不繼續(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,會命中第三個location。
前面兩個location都是前綴模式,由匹配字符串最長的處理(即第二個)。第二個location沒有阻止繼續(xù)匹配正則,于是又繼續(xù)匹配第三個location(正則模式),所以最后是由第三個location處理。
4. 兩種前綴模式不能同時存在
看例子:
# 前綴模式(不繼續(xù)匹配正則)
location ^~ /a {
default_type text/html;
return 200 '333';
}
# 前綴模式(繼續(xù)匹配正則)
location /a {
default_type text/html;
return 200 '444';
}上面這段配置 Nginx 會報錯,因為在路徑相同的情況下,這兩種模式不能共存。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Nginx Location指令URI匹配規(guī)則詳解小結(jié)
這篇文章主要介紹了Nginx Location指令URI匹配規(guī)則詳解小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
nginx https反向代理tomcat的2種實現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于nginx https反向代理tomcat的2種實現(xiàn)方法,第一種方法是nginx配置https,tomcat也配置https,第二種方法是nginx采用https,tomcat采用http,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。2017-12-12
Nginx 域名轉(zhuǎn)發(fā)的實現(xiàn)
這篇文章主要介紹了Nginx 域名轉(zhuǎn)發(fā)的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08

