nginx location 匹配順序

2021-09-01 08:15:12 字數 1138 閱讀 6839

location匹配的原型是這樣的:location[=|~|~*|^~|@] /uri/

「=」是精確匹配

「@」是命名的location,在正常的location匹配中不會使用,僅僅在內部跳轉中才會使用到。

「~」是區分大小寫的匹配

「~*」是不區分大小寫的匹配

「^~」表示中止正則匹配(這個平時沒太注意)

在乙個請求中,匹配的順序是這樣的。先使用所有location來匹配uri的開始部分,最精確匹配的(形象點說,就是即配置字元數最多的)為最後匹配結果;然後進行正規表示式的匹配,按照配置檔案中的順序來進行匹配,如果有乙個匹配成功,則結束正則匹配,且最後匹配結果為此location,否則,最後結果為先前最精確匹配的的那個location

之前有提到過」^~」,它配置在非正則匹配中,表示,如果最精確匹配的loction為此location,則立即返回該location作為結果,而不進行下一步的正則匹配,這樣,就此可以不必要進入到正則匹配當中,以加快匹配速度。

還有」=」,它是最精確的匹配,而且優先順序最高。最先進行帶」=」的匹配,如果匹配成功,立馬返回。

最後總結下匹配的過程,有四步:

1. 帶」=」字首的先進行匹配,如果找到了,中止查詢。

2. 所有其它location進行非正則的匹配,找到最精確匹配的那個,如果匹配到帶」^~」字首的,則中止查詢。

3. 正則查詢,按照我們配置檔案中配置的location順序進行查詢。

4. 如果正則查詢匹配成功,則使用此正則匹配的location,否則,使用第二步查詢的結果。

這裡要特別說明下」=」與」^~」的區別:

「=」在匹配時,則匹配帶」=」的location。而」^~」,則會匹配所有非」=」的非正則location,只有在確認它是最精確匹配的location後,才生效。

nginx location匹配規則

location匹配命令 波浪線表示執行乙個正則匹配,區分大小寫 表示執行乙個正則匹配,不區分大小寫 表示普通字元匹配,不使用正規表示式,如果該選項匹配,只匹配該選項,不匹配別的選項,一般用來匹配目錄 進行普通字元精確匹配 定義乙個命名的 location,使用在內部定向時,例如 error pag...

nginx location匹配規則

location匹配命令 波浪線表示執行乙個正則匹配,區分大小寫 表示執行乙個正則匹配,不區分大小寫 表示普通字元匹配,如果該選項匹配,只匹配該選項,不匹配別的選項,一般用來匹配目錄 進行普通字元精確匹配 定義乙個命名的 location,使用在內部定向時,例如 error page,try fil...

nginx location匹配規則

location匹配命令 波浪線表示執行乙個正則匹配,區分大小寫 表示執行乙個正則匹配,不區分大小寫 表示普通字元匹配,如果該選項匹配,只匹配該選項,不匹配別的選項,一般用來匹配目錄 進行普通字元精確匹配 定義乙個命名的 location,使用在內部定向時,例如 error page,try fil...