nginx location匹配規則

location匹配命令

~      #波浪線表示執行一個正則匹配,區分大小寫
~*     #表示執行一個正則匹配,不區分大小寫
^~     #^~表示普通字符匹配,如果該選項匹配,只匹配該選項,不匹配別的選項,一般用來匹配目錄
=      #進行普通字符精確匹配
@      #"@" 定義一個命名的 location,使用在內部定向時,例如 error_page, try_files

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

location 優先級官方文檔

  1. Directives with the = prefix that match the query exactly. If found, searching stops.

  2. All remaining directives with conventional strings, longest match first. If this match used the ^~ prefix, searching stops.

  3. Regular expressions, in order of definition in the configuration file.

  4. If #3 yielded a match, that result is used. Else the match from #2 is used.

  1. =前綴的指令嚴格匹配這個查詢。如果找到,停止搜索。

  2. 所有剩下的常規字符串,最長的匹配。如果這個匹配使用^〜前綴,搜索停止。

  3. 正則表達式,在配置文件中定義的順序。

  4. 如果第3條規則產生匹配的話,結果被使用。否則,使用第2條規則的結果。

 

例如

Press CTRL+C to Copy, CTRL+V to Paste

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 ] }

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

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

@location 例子
error_page 404 = @fetch;

location @fetch(
proxy_pass http://fetch;
)

轉載請保留:http://www.nginx.cn/115.html


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章