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 中記住的最長前綴匹配