官方location匹配规则

location 匹配格式

location [=|~|~*|^~] /uri/ { … } //方框里面的参数为可选项,括号里为指令集

location 表达式分类

1. 「前缀字符串」:以 = (精确匹配)或 ^~ 修饰符开头或者不带任何修饰符的字符串

location = /static/img/logo.jpg {...}

location ^~ /static/img/logo.jpg {...}

location /static/img/logo.jpg {...}

2. 「正则表达式」:以~*(不区分大小写),或者~(区分大小写)修饰符开头,例如:下面的正则表达式匹配的是以“gif|jpg|jpeg” 文件后缀名结尾的所有URI,\. 代表文件后缀名。

location ~* \\.(gif|jpg|jpeg)$ {...}
 
location ~ \\.(gif|jpg|jpeg)$ {...}

文字版描述匹配规则

  1. nginx 首先匹配以「前缀字符串」定义的location,找到匹配成功的最长的前缀字符串,并且记录下来,然后继续匹配「正则表达式」定义的location(按照配置文件里locaton块定义的顺序依次进行匹配)如果匹配成功,则终止匹配。
  2. 如果「正则表达式」没有匹配成功,则采用之前记录的匹配成功的最长「前缀字符串」的location.
  3. 如果匹配成功的最长「前缀字符串」含有“^~”修饰符,则终止匹配,即不再继续匹配「正则表达式」定义的location路径。
  4. 如果location 含有“=”字符,并且与请求的URI精确匹配成功,则终止匹配。

优先级: = 大于 ^~ 大于 正则表达式 大于 通用匹配

^~ ,前缀匹配时,是遍历之后,以最长的前缀字符串作为匹配的最终结果。

location 匹配时是先匹配前缀字符串的几种类型的表达式,再匹配正则表达式

匹配优先级规则