Nginx 配置中的 server
塊中的 location
用來匹配請求 URI,以便對不通的 URI 進行不通的處理。express
location = expression {}
精準匹配,只有 URI 和 expression 徹底相同,纔算匹配成功;location expression {}
普通匹配,只要 URI 前部分的字符與 expression 相同就算匹配成功;location ^~ expression {}
普通匹配,只要 URI 前部分字符與 expression 相同就算匹配成功;location ~ regex {}
正則匹配(區分大小寫);location ~* regex {}
正則匹配(不區分大小寫);總結可分爲三大類:精準匹配、普通匹配和正則匹配。code
對於一個進入 Nginx 的請求來說,其 URI 可能符合多個 location
的匹配條件,但這條請求最終只會被一個 location 邏輯所處理(重定向不算),那麼,匹配時確定有優先級之分。Nginx 的匹配邏輯是這樣的:server
若請求 URI 與 location =
相匹配(符合精準匹配條件),則執行該 location
的內容,再也不進行其餘匹配,不然見下一條。io
接下來 Nginx 會將 URI 與全部普通匹配的 location
進行比較(不管是 ^~
類型仍是無符號類型),而後找出匹配度最高的 location
,若該 location
爲 ^~
類型,則中止匹配,執行該 location
內容;若匹配度最高的 location
爲無符號類型,則保留這個無符號 location
,繼續進行下面的正則匹配;若 URI 不符合任何普通匹配 location
的條件,則直接進入下一步。配置
正則的匹配與 location
的順序相關,Nginx 會從上至下進行匹配,若匹配到一個 location
,則執行該 location
邏輯,忽略後面全部的正則 location
,終止匹配;若一個正則都沒匹配上,則執行以前保留的那個無符號 location
,若以前沒有保留,則直接返回 404。請求