對nginx中location的認識

2022-07-03 09:15:08 字數 1916 閱讀 8756

關於一些對location認識的誤區

1.location的匹配順序是「先匹配正則,在匹配普通」。

location的匹配順序其實是「先匹配普通,在匹配正則」。造成誤解的原因是:正則匹配會覆蓋普通匹配

2.location的執行邏輯跟location的編輯順序無關

a. 「普通location」的匹配規則是「最大字首」,因此「普通location」的確與編輯順序無關;

但是「正則location」的匹配規則是「順序匹配」,且只要匹配到第乙個就停止後面的匹配。

b.「普通location 」與「正則 location 」之間的匹配順序是,先匹配普通 location ,再「考慮」匹配正則 location 。

注意這裡的「考慮」是「可能」的意思,也就是說匹配完「普通 location 」後,有的時候需要繼續匹配「正則 location 」,有的時

候則不需要繼續匹配「正則 location 」。

兩種情況下不需要繼續匹配正則location:

(1)當普通location的前面指定了「^~」,特別告訴nginx本條普通location一旦匹配上,則不需要繼續匹配。

(2)當普通location恰好嚴格匹配上,不是最大字首匹配,則不再繼續匹配正則

總結:  「正則 location 匹配讓步普通 location 的嚴格精確匹配結果;但覆蓋普通 location 的最大字首匹配結果」

3.location的語法

location [ = | ~ | ~* | ^~ | @]  /uri/

根據不同字首「=」,「~*」,「^~」,「@」和不帶任何字首,表達的含義不同

總結:儘管location 的/uri/ 配置一樣,但字首不一樣,表達指令含義不同。

4.location字首的詳細說明

主要分為兩大類:正則location和普通location

正則location  「~」和「~*」:

「~」表示區分大小寫;「~*」表示不區分大小寫

普通location  除了上面其餘全是(包括沒有字首) 「=」,「^~」,「@」

「^~」中的「^」表示非,「~」表示正則,意思為不要繼續匹配正則

「=」也表示阻止正則location,和「^~」的區別為:「^~」依然遵守「最大字首」匹配;而「=」必須是嚴格匹配。

還有一種「隱含」的方式來阻止正則location 的搜尋:當「最大字首」匹配恰好就是乙個「嚴格精確(exact match )」匹

配,照樣會停止後面的搜尋。意思是:只要遇到「精確匹配exact match 」,即使普通location 沒有帶「= 」或「^~ 」前

綴,也一樣會終止後面的匹配。

「@ 」是用來定義「named location 」的(可以理解為獨立於「普通location」和「正則location」之外的第三種型別),這種「named location 」不是用來處理普通的http 請求的,它

是專門用來處理「內部重定向(internally redirected )」請求的。

注意:這裡說的「內部重定向(internally redirected )」是不需要跟瀏覽器互動的,純粹是服務端的乙個**行為。

5.location的匹配原則  最大字首匹配

例如:location /prefix/mid/ {} 和location /prefix/ {} ,

對於http 請求/prefix/mid/t.html ,字首匹配的話兩個location 都滿足,選哪個?

原則是:the most specific match ,於是選的是location /prefix/mid/ {} 。

以上就是這次的全部內容!

nginx中的location匹配規則

概述 1.location在nginx配置檔案中的作用是根據使用者請求的uri來執行不同的應用。2.uri的定義 標識 定位任何資源的字串 協議 網域名稱 目錄a 目錄b 檔案c 一 location寫法 二 符號說明 開頭表示精確匹配 如 a 中只匹配根目錄結尾的請求,後面不能帶任何字串.開頭表示...

nginx中的location匹配規則

1 如果location裡面有正規表示式,那麼proxy pass後面只能是http ip port這種模式,不能是http ip port path這種路徑 2 location的路徑最好以斜槓結尾 3 proxy pass如果是http ip port path這種模式,那麼最好以斜槓結尾 1 ...

Nginx配置基礎 location

location表示式型別 表示執行乙個正則匹配,區分大小寫 表示執行乙個正則匹配,不區分大小寫 表示普通字元匹配。使用字首匹配。如果匹配成功,則不再匹配其他location。進行普通字元精確匹配。也就是完全匹配。常規字串匹配。按字首匹配。它定義乙個命名的 location,使用在內部定向時,例如 ...