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-08Nginx Location指令URI匹配規(guī)則詳解小結(jié)
這篇文章主要介紹了Nginx Location指令URI匹配規(guī)則詳解小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04nginx 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-12Nginx會(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-07Nginx 域名轉(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