使用過(guò)nginx的同學(xué)都知道葵第,在nginx配置文件中通過(guò)location配置路由轉(zhuǎn)發(fā)規(guī)則攒霹,配置語(yǔ)法為:
location [=|~|~*|^~] /uri/ {
...
}
中括號(hào)中為路由匹配符號(hào)珊拼,常見(jiàn)的有:
1 =:精確匹配
2 ^~:精確前綴匹配
3 ~:區(qū)分大小寫(xiě)的正則匹配
4 ~*:不區(qū)分大小寫(xiě)的正則匹配
5 /uri:普通前綴匹配
6 /:通用匹配
精確匹配
精確匹配使用 = 表示,nginx進(jìn)行路由匹配的時(shí)候友雳,精確匹配具有最高的優(yōu)先級(jí)稿湿,請(qǐng)求一旦精確匹配成功nginx會(huì)停止搜索其他到匹配項(xiàng)
配置實(shí)例
location = /test {
...
}
精確前綴匹配
精確前綴匹配的優(yōu)先級(jí)僅次于精確匹配,nginx對(duì)一個(gè)請(qǐng)求精確前綴匹配成功后押赊,停止繼續(xù)搜索其他到匹配項(xiàng)
配置實(shí)例
location ^~ /test_a {
...
}
正則匹配
正則匹配分為區(qū)分大小寫(xiě)和不區(qū)分大小寫(xiě)兩種饺藤,分別用 ~ 和 ~* 表示;一個(gè)請(qǐng)求精確匹配和精確前綴匹配都失敗后流礁,如果配置有相關(guān)的正則匹配location涕俗,nginx會(huì)嘗試對(duì)該請(qǐng)求進(jìn)行正則匹配。需要說(shuō)明的是正則匹配之間沒(méi)有優(yōu)先級(jí)一說(shuō)神帅,而是按照在配置文件中出現(xiàn)的順序進(jìn)行匹配再姑,一旦匹配上一個(gè),就會(huì)停止向下繼續(xù)搜索
配置實(shí)例
# 配置1
location ~ /test_a {
...
}
# 配置2
location ~* /test_A {
...
}
對(duì)于請(qǐng)求 /test_a/hello 來(lái)說(shuō)會(huì)被匹配到 配置1 處理找御,/test_A/hello 則會(huì)被匹配給 配置2 處理
普通前綴匹配
普通前綴匹配前面沒(méi)有任何修飾符元镀,直接在location后寫(xiě)需要匹配的uri,它的優(yōu)先級(jí)次于正則匹配
配置實(shí)例
location /img {
...
}
通用匹配
通用匹配使用一個(gè) / 表示霎桅,可以匹配所有請(qǐng)求栖疑,一般nginx配置文件最后都會(huì)有一個(gè)通用匹配規(guī)則,當(dāng)其他匹配規(guī)則均失效時(shí)滔驶,請(qǐng)求會(huì)被路由給通用匹配規(guī)則處理遇革;如果沒(méi)有配置通用匹配,并且其他所有匹配規(guī)則均失效時(shí),nginx會(huì)返回 404 錯(cuò)誤
配置實(shí)例
location / {
...
}
引用一個(gè)完整例子
nginx路由規(guī)則配置:
location = / {
echo "規(guī)則A";
}
location = /login {
echo "規(guī)則B";
}
location ^~ /static/ {
echo "規(guī)則C";
}
location ^~ /static/files {
echo "規(guī)則X";
}
location ~ \.(gif|jpg|png|js|css)$ {
echo "規(guī)則D";
}
location ~* \.png$ {
echo "規(guī)則E";
}
location /img {
echo "規(guī)則Y";
}
location / {
echo "規(guī)則F";
}
請(qǐng)求uri | 匹配路由規(guī)則 |
---|---|
http://localhost/ | 規(guī)則A |
http://localhost/login | 規(guī)則B |
http://localhost/register | 規(guī)則F |
http://localhost/static/a.html | 規(guī)則C |
http://localhost/static/files/a.txt | 規(guī)則X |
http://localhost/a.png | 規(guī)則D |
http://localhost/a.PNG | 規(guī)則E |
http://localhost/img/a.gif | 規(guī)則D |
http://localhost/img/a.tiff | 規(guī)則Y |
以上是對(duì)nginx路由匹配規(guī)則的粗略總結(jié)和歸納萝快,如有不足之處歡迎指正锻霎,共同探討!