nginx, nginx的位置正則匹配是怎樣的?不知道小伙伴們今天來看看邊肖的分享吧!
位置可以分為兩種:正常配置和常規(guī)匹配。
一、總體配置
普通位置根據(jù)使用方法分為兩種,格式如下:
1. location/{
指令序列
}
解釋:括號(hào)中定義的表示對(duì)當(dāng)前路徑和子路徑下的所有對(duì)象都有效。"最低優(yōu)先級(jí)"
所有用戶的請(qǐng)求都可以由它來匹配。
示例:
location/{
root /web;
對(duì)應(yīng)策略
}
這意味著網(wǎng)頁(yè)根目錄在/web中。
你訪問的時(shí)候直接去http://127.0.0.1或者域名就行了。
所有用戶的請(qǐng)求都可以由它來匹配。
location /bbs {
root /web;
對(duì)應(yīng)策略
}
這意味著網(wǎng)頁(yè)的根目錄位于/web/bbs。
訪問的時(shí)候直接去http://127.0.0.1/bbs就可以了。
當(dāng)用戶訪問時(shí)
http://127.0.0.1/bbs/
或者
http://127.0.0.1/bbs/subpath
只能用上面的路徑來匹配。
問題:當(dāng)用戶訪問http://127.0.0.1/bbs/a.html時(shí),
當(dāng)這兩個(gè)位置同時(shí)存在時(shí),如下所示,哪個(gè)配置將生效?
server {
listen 80;
server_name www.benet.com;
index index.html;
location/{
root /web;
}
location /bbs {
root /web;
}
結(jié)論是,
當(dāng)用戶請(qǐng)求的URL(/BBS)同時(shí)匹配兩個(gè)位置時(shí),
最大前綴生效(位置/bbs生效)
如果本段第一段(位置/bbs)不生效。
第一段相當(dāng)于默認(rèn)策略,因?yàn)閘ocation/包含所有請(qǐng)求,所有請(qǐng)求都以“/”開頭。
2. Location=/Path {
指令序列
}
解釋:括號(hào)中定義的表示對(duì)當(dāng)前路徑有效,但對(duì)子路徑無效(與指定路徑完全匹配的不包括子路徑)?!八凶罡邇?yōu)先權(quán)?!?
示例:
location=/prefix {
}
也就是說,訪問www.benet.com/prefix的用戶可以通過上面的位置進(jìn)行匹配,它只匹配/前綴。
/下的子路徑不匹配。
訪問www.benet.com/prefix/a的用戶無法與之匹配。
最高優(yōu)先級(jí):表示一旦匹配到該位置,立即生效。其他位置無論是否符合要求都不會(huì)生效。
示例:
location /prefix/{
root /;
}
location=/prefix/{
return 500;
}
第二,常規(guī)匹配
常規(guī)匹配也分為兩種:
1. location ~ URI {}
~匹配文件區(qū)分大小寫。
2. Location ~* URI {}:
~ *匹配文件不區(qū)分字符。
正則匹配按照正則位置寫的順序生效,一旦匹配成功,將停止匹配到后續(xù)位置。
示例:
location ~ /bbs {
return 400;
}
location ~* /bbs {
return 500;
}
網(wǎng)頁(yè)返回錯(cuò)誤消息400。
然后切換配置的兩個(gè)部分。
location ~* /bbs {
return 500;
}
location ~ /bbs {
return 400;
}
三。匹配訂單和有效訂單
匹配順序和有效順序是兩個(gè)概念。
當(dāng)配置中有多個(gè)位置,并且既有正常位置又有常規(guī)位置時(shí),則
1,匹配順序是:
用戶請(qǐng)求的URL
(1)先匹配普通位置。
普通位置根據(jù)編輯順序匹配。
(2)在匹配規(guī)則的位置
常規(guī)位置匹配時(shí)按照編輯順序進(jìn)行匹配。
但是,常規(guī)位置和普通位置在編輯順序上不匹配。
2.有效訂單
當(dāng)正常和常規(guī)都存在時(shí),遵循以下原則。
1.nginx開始匹配編輯順序中的普通位置。
(1)如果匹配過程中匹配到了
location=:nginx會(huì)立即生效即停止后續(xù)的匹配
(2)如果沒有l(wèi)ocaiton=話,
如果匹配到locatin ^~。會(huì)停止后續(xù)的正則匹配
然后最大前綴locaiton生效
最后是location/生效
(3) 如果以上兩種location都不存在的話
nginx會(huì)匹配所有l(wèi)ocation后看后續(xù)有沒有正則locaion
如果后續(xù)沒有正則locaiton
然后最大前綴locaiton生效
最后是location/生效
如果后續(xù)還有正則location
一旦匹配成功一條正則locaion,這條會(huì)生效,并且會(huì)停止后續(xù)的正則匹配,還會(huì)會(huì)覆蓋前邊的普通location結(jié)果
nginx,以上就是本文為您收集整理的nginx最新內(nèi)容,希望能幫到您!更多相關(guān)內(nèi)容歡迎關(guān)注。