nginx的location正則匹配是什么呢?不知道的小伙伴來看看小編今天的分享吧!
Location根據(jù)類型分為兩種:普通配置和正則匹配
一、 普通配置
普通location根據(jù)使用方法又分為兩種,格式如下:
1. location / {
命令序列
}
解釋:括號中定義的表示對當(dāng)前路徑及子路徑下的所有對象有效。“優(yōu)先級最低”
用戶所有的請求都能被它匹配到。
例子:
location / {
root /web;
相應(yīng)策略
}
這說明網(wǎng)頁根目錄在/web
訪問的時候直接http://127.0.0.1或是域名就可以了
用戶所有的請求都能被它匹配到
location /bbs {
root "/web";
相應(yīng)策略
}
這就說明網(wǎng)頁根目錄是位于 /web/bbs
訪問的時候直接http://127.0.0.1/bbs就可以了
當(dāng)用戶訪問
http://127.0.0.1/bbs/
或是
http://127.0.0.1/bbs/子路徑
的時候才能被上邊的路徑匹配到。
問題:當(dāng)用戶訪問http://127.0.0.1/bbs/a.html時
這兩段location 同時存在時如下,那么哪段配置會生效呢?
server {
listen 80;
server_name www.benet.com;
index index.html;
location / {
root /web;
}
location /bbs {
root /web;
}
結(jié)論就是,
當(dāng)用戶請求的(/bbs)url同時匹配到兩段location時,
最大前綴生效(location /bbs生效)
如果沒有這段(location /bbs) 第一段生效。
第一段相當(dāng)于默認策略,因為location / 包含所有的請求,所有的請求都是以 ”/” 開始的
2. location = /路徑 {
命令序列
}
解釋:括號中定義的表示對當(dāng)前路徑有效,子路徑不生效(精確匹配指定的路徑不包括子路徑)。“它的優(yōu)先級最高。”
例子:
location = /prefix {
}
也就是用戶訪問www.benet.com/prefix能被上邊的location匹配到,它只匹配"/prefix",
"/"下的子路不匹配。
用戶訪問www.benet.com/prefix/a 就不能被它匹配到
優(yōu)先級最高:指的是一旦匹配到此location ,立即生效。其它location無論是否匹配到請求都不生效。
例子:
location /prefix/ {
root /;
}
location = /prefix/ {
return 500;
}
二、 正則匹配
正則匹配也分為兩種:
1. location ~ URI {}
~匹配的文件是區(qū)分字符 大小寫的
2.location ~* URI {} :
~*匹配的文件是不區(qū)分字符大小的
正則匹配是按照正則location編寫的順序生效的,一旦匹配成功即停止匹配到后續(xù)的location。
例子:
location ~ /bbs {
return 400;
}
location ~* /bbs {
return 500;
}
網(wǎng)頁返回錯誤信息400
然后將兩段配置調(diào)換一下位置
location ~* /bbs {
return 500;
}
location ~ /bbs {
return 400;
}
三、匹配順序和生效順序
匹配順序和生效順序是兩個概念
當(dāng)配置中出現(xiàn)多個locaton并且普通和正則都有,那么
1、匹配順序是:
用戶請求的URL
(1)先匹配普通location
普通location在匹配是按照編輯順序匹配
(2)在匹配正則location
正則location在匹配時按照編輯順序匹配
但是正則和普通locaiton不按照編輯順序匹配
2、生效順序
當(dāng)普通和正則都存在的情況下,遵循以下原則
1.nginx開始按照編輯順序依次匹配普通location
(1)如果匹配過程中匹配到了
"location =" :nginx會立即生效即停止后續(xù)的匹配
(2)如果沒有"locaiton ="話,
如果匹配到"locatin ^~"。會停止后續(xù)的正則匹配
然后最大前綴locaiton生效
最后是location / 生效
(3) 如果以上兩種location都不存在的話
nginx會匹配所有l(wèi)ocation后看后續(xù)有沒有正則locaion
如果后續(xù)沒有正則locaiton
然后最大前綴locaiton生效
最后是location / 生效
如果后續(xù)還有正則location
一旦匹配成功一條正則locaion,這條會生效,并且會停止后續(xù)的正則匹配,還會會覆蓋前邊的普通location結(jié)果
以上就是小編今天的分享了,希望可以幫助到大家。
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com