Nginx Location 路徑匹配優先級

location表達式類型

~ 表示執行一個正則匹配,區分大小寫
~* 表示執行一個正則匹配,不區分大小寫
^~ 表示普通字符匹配。優先使用前綴匹配。如果匹配成功,則不再匹配其他location。
= 進行普通字符精確匹配。也就是完全匹配。
@ “@” 定義一個命名的 location,使用在內部定向時,例如 error_page, try_files

location優先級說明

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

對於請求: http://example.com/static/img/logo.jpg

1、如果命中精確匹配,例如:

location = /static/img/logo.jpg {

}

則優先精確匹配,並終止匹配。

2、如果命中多個前綴匹配,例如:

location /static/ {

}

location /static/img/ {

}

則記住最長的前綴匹配,即上例中的 /static/img/,並繼續匹配

3、如果最長的前綴匹配是優先前綴匹配,即:

location /static/ {

}

location ^~ /static/img/ {

}

則命中此最長的優先前綴匹配,並終止匹配

4、否則,如果命中多個正則匹配,即:

location /static/ {

}

location /static/img/ {

}

location ~* /static/ {

}

location ~* /static/img/ {

}

則忘記上述 2 中的最長前綴匹配,使用第一個命中的正則匹配,即上例中的 location ~* /static/ ,並終止匹配(命中多個正則匹配,優先使用配置文件中出現次序的第一個)

5、否則,命中上述 2 中記住的最長前綴匹配

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章