nginx location的優先級

原來一直覺得location的優先級是前後順序,結果有次項目中傻眼了,趕忙百度一下,下面的內容參考了這個連接nginx

location表達式類型

~ 表示執行一個正則匹配,區分大小寫
~* 表示執行一個正則匹配,不區分大小寫
^~ 表示普通字符匹配。使用前綴匹配。若是匹配成功,則再也不匹配其餘location。
= 進行普通字符精確匹配。也就是徹底匹配。
@ "@" 定義一個命名的 location,使用在內部定向時,例如 error_page, try_files正則表達式

location優先級說明

在nginx的location和配置中location的順序沒有太大關係。正location表達式的類型有關。相同類型的表達式,字符串長的會優先匹配。
如下是按優先級排列說明:
第一優先級:等號類型(=)的優先級最高。一旦匹配成功,則再也不查找其餘匹配項。
第二優先級:^~類型表達式。一旦匹配成功,則再也不查找其餘匹配項。
第三優先級:正則表達式類型(~ ~*)的優先級次之。若是有多個location的正則能匹配的話,則使用正則表達式最長的那個。
第四優先級:常規字符串匹配類型。按前綴匹配。app

下面是個人一段示例代碼,配置以下curl

user root; http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 38080; location ^~ /hls { content_by_lua 'ngx.say("success /hls")
                        ngx.exit(ngx.OK)';
 } location / { content_by_lua 'ngx.say("success")
                        ngx.exit(ngx.OK)';
 } location ~* \.(m3u8|ts)$ { content_by_lua 'ngx.say("success *.m3u8")
                ngx.exit(ngx.OK)';
 } } }

那麼以下請求以下連接,會輸出什麼呢lua

curl http://127.0.0.1:38080/demo/test.jpg
curl http://127.0.0.1:38080/demo/test.m3u8
curl http://127.0.0.1:38080/hls/test.m3u8
curl http://127.0.0.1:38080/hls/test.jpg

url

spa

code

server

blog

 

 

 

 

 

下面是輸出結果哈

success success *.m3u8 success /hls success /hls
相關文章
相關標籤/搜索