nginx中location匹配順序


一、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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM