nginx location優先級
阿新 • • 發佈:2018-12-04
字符串匹配 第一個 普通 index 進行 urn 則表達式 ati 配置實例
目錄
- 1. 配置語法
- 2. 配置實例
- 3. 總結:
網上查了下location的優先級規則,但是很多資料都說的模棱兩可,自己動手實地配置了下,下面總結如下。
1. 配置語法
1> 精確匹配
location = /test {
...
}
2> 前綴匹配
- 普通前綴匹配
location /test {
...
}
- 優先前綴匹配
location ^~ /test {
...
}
3> 正則匹配
- 區分大小寫
location ~ /test$ { ... }
- 不區分大小寫
location ~* /test$ {
...
}
2. 配置實例
1> 多個前綴匹配,訪問/test/a,則先記住最長的前綴匹配,並繼續匹配
location / {
root html;
index index.html index.htm;
}
location /test {
return 601;
}
location /test/a {
return 602;
}
命中的響應狀態碼
602
2> 前綴匹配和正則匹配,訪問/test/a,則命中正則匹配
location / {
root html;
index index.html index.htm;
}
location /test/a {
return 601;
}
location ~* /test/a$ {
return 602;
}
命中的響應狀態碼
602
3> 優先前綴匹配和正則匹配,訪問/test/a,則命中優先前綴匹配,終止匹配
location / { root html; index index.html index.htm; } location ^~ /test/a { return 601; } location ~* /test/a$ { return 602; }
命中的響應狀態碼
601
4> 多個正則匹配命中,訪問/test/a,則使用第一個命中的正則匹配,終止匹配
location / {
root html;
index index.html index.htm;
}
location ~* /a$ {
return 601;
}
location ~* /test/a$ {
return 602;
}
命中的響應狀態碼
601
5> 精確匹配和正則匹配,訪問/test,精確匹配優先
location / {
root html;
index index.html index.htm;
}
location ~* /test {
return 602;
}
location = /test {
return 601;
}
命中的響應狀態碼
601
3. 總結:
- 搜索優先級:
精確匹配 > 字符串匹配( 長 > 短 [ 註: ^~ 匹配則停止匹配 ]) > 正則匹配( 上 > 下 )
- 使用優先級:
精確匹配 > (^~) > 正則匹配( 上 > 下 )>字符串(長 > 短)
解釋:
- 先搜索有沒有精確匹配,如果匹配就命中,終止匹配。
- 索前綴匹配,命中則先記住(可能命中多個),繼續往下搜索,如果有優先前綴匹配符號“^~”,則命中優先前綴匹配,不再去檢查正則表達式;反之則繼續進行正則匹配,如果命中則使用正則表達式,如果沒命中則使用最長的前綴匹配。
- 前綴匹配,長的優先;多個正則匹配,在上面的優先。
nginx location優先級