一、location語法 |
語法:
Syntax: location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
Default: —
Context: server, location
分類:
正則location和普通location
正則location “~”和“~*”:“~”表示區分大小寫;“~*”表示不區分大小寫
普通location: 除了上面其余全是(包括沒有前綴) “=”,“^~”,“@”
“^~”中的“^”表示非,“~”表示正則,意思為不要繼續匹配正則
“=”也表示阻止正則location,和“^~”的區別為:“^~”依然遵守“最大前綴”匹配;而“=”必須是嚴格匹配。
“@ ”是用來定義“Named Location ”的(可以理解為獨立於“普通location”和“正則location”之外的第三種類型),這種“Named Location ”不是用來處理普通的HTTP 請求的,它
是專門用來處理“內部重定向(internally redirected )”請求的。
注意:這里說的“內部重定向(internally redirected )”是不需要跟瀏覽器交互的,純粹是服務端的一個轉發行為。
二、匹配順序 |
匹配順序總結為以下兩點:
1.匹配的順序是先匹配普通字符串,然后再匹配正則表達式。另外普通字符串匹配順序是根據配置中字符長度從長到短,也就是說使用普通字符串配置的location順序是無關緊要的,反正最后nginx會根據配置的長短來進行匹配,但是需要注意的是正則表達式按照配置文件里的順序測試。找到第一個匹配的正則表達式將停止搜索。
2.一般情況下,匹配成功了普通字符串location后還會進行正則表達式location匹配。有兩種方法改變這種行為,其一就是使用“=”前綴,這時執行的是嚴格匹配,並且匹配成功后立即停止其他匹配,同時處理這個請求;另外一種就是使用“^~”前綴,如果把這個前綴用於一個常規字符串那么告訴nginx 如果路徑匹配那么不測試正則表達式。
三、注意事項 |
1.nginx匹配順序是先匹配普通location,在匹配正則location;
2.普通匹配規則無順序無論寫在配置文件的那個地方都一樣,但是正則匹配則是按照匹配配置文件中由上到下的先后順序匹配;
更多詳情參考官網:http://nginx.org/en/docs/http/ngx_http_core_module.html