1. 程式人生 > >Nginx location指令匹配順序規則

Nginx location指令匹配順序規則

gin 順序 過程 ring 舉例 請求 ret 其他 html

location匹配命令

1. “= ”,字面精確匹配, 如果匹配,則跳出匹配過程。(不再進行正則匹配)

2. “^~ ”,最大前綴匹配,如果匹配,則跳出匹配過程。(不再進行正則匹配)

3. 不帶任何前綴:最大前綴匹配,舉例如下:

location / 代表以"/"開頭的搜索匹配, 再沒有正則表達式匹配的情況下才進行這個匹配(優先級最低)

4. “~ ”,大小寫相關的正則匹配

5. “~* ” , 大小寫無關的正則匹配

6. “@”, Named location 不是普通的location匹配,而是用於location內部重定向的變量。

其中: 1、2、3 三種情況屬於 location using literal string, 即使用普通字符串的location匹配;

4、5 二種情況屬於 location using regular expresstion,即使用正則表達式的location匹配;

location 匹配的優先級(與location在配置文件中的順序無關)
= 精確匹配會第一個被處理。如果發現精確匹配,nginx停止搜索其他匹配。
普通字符匹配,正則表達式規則和長的塊規則將被優先和查詢匹配,也就是說如果該項匹配還需去看有沒有正則表達式匹配和更長的匹配。
^~ 則只匹配該規則,nginx停止搜索其他匹配,否則nginx會繼續處理其他location指令。
最後匹配理帶有"~"和"~*"的指令,如果找到相應的匹配,則nginx停止搜索其他匹配;當沒有正則表達式或者沒有正則表達式被匹配的情況下,那麽匹配程度最高的逐字匹配指令會被使用。

location  = / {
  # 只匹配"/".
  [ configuration A ] 
}
location  / {
  # 匹配任何請求,因為所有請求都是以"/"開始
  # 但是更長字符匹配或者正則表達式匹配會優先匹配
  [ configuration B ] 
}
location ^~ /images/ {
  # 匹配任何以 /images/ 開始的請求,並停止匹配 其它location
  [ configuration C ] 
}
location ~* \.(gif|jpg|jpeg)$ {
  # 匹配以 gif, jpg, or jpeg結尾的請求. 
  # 但是所有 /images/ 目錄的請求將由 [Configuration C]處理.   
  [ configuration D ] 
}

請求URI例子:

  • / -> 符合configuration A
  • /documents/document.html -> 符合configuration B
  • /images/1.gif -> 符合configuration C
  • /documents/1.jpg ->符合 configuration D

Nginx location指令匹配順序規則