location匹配命令
~ #波浪线表示执行一个正则匹配,区分大小写
~* #表示执行一个正则匹配,不区分大小写
^~ #^~表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录
= #进行普通字符精确匹配
@ #"@" 定义一个命名的 location,使用在内部定向时,例如 error_page, try_files
!~和!~* #分别为区分大小写不匹配及不区分大小写不匹配

location匹配优先级

匹配的优先级与location块在文件中的位置是无关的。

  1. = 精确匹配会第一个被处理。如果发现精确匹配,nginx停止搜索其他匹配。
  2. 普通字符匹配,正则表达式规则和长的块规则将被优先和查询匹配,也就是说如果该项匹配还需去看有没有正则表达式匹配和更长的匹配。
  3. ^~ 则只匹配该规则,nginx停止搜索其他匹配,否则nginx会继续处理其他location指令。
  4. 最后匹配理带有"~"和"~*"的指令,如果找到相应的匹配,则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 ]
}