Nginx location匹配优先级记录

location 主要形式

  1. 精确匹配:location = /abc { }
  2. 截断前缀匹配(匹配路径的前缀,如果匹配到则立刻返回。不会继续向下匹配正则规则):location ^~ /abc { }
  3. 不区分大小写的正则匹配:location ~* /abc { }
  4. 正则匹配:location ~ /abc { }
  5. 普通路径前缀匹配:location /abc { }

location 优先级

在如下前提下,优先级:1 > 2 > 3 > 4 > 5
前提:客户端请求URL是:http://localhost/abc
备注:我们暂且只记录优先级,不考虑uri和代理路径拼接逻辑。

location 优先级解释

location = /abc {
# 精确匹配 /abc ,例如 http://localhost:8888/abc。
[ configuration A ]
}
location / {
# 缺省匹配,优先级最低:因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求,如果所有规则都没匹配到,则匹配到这条规则。
[ configuration B ]
}
location /documents/ {
# 普通路径前缀匹配:匹配任何以 /documents/ 开头的地址,匹配到以后,还要继续往下匹配。
# 只有后面的正则表达式没有匹配到且也没有更长的前缀匹配时,才会采用这一条返回。
[ configuration C ]
}
location ~ /documents/Abc/Deh {
# 正则匹配:匹配任何以 /documents/Abc/Deh 开头的地址,匹配到以后,还要继续往下匹配。
# 只有后面的正则表达式没有匹配到且也没有更长的前缀匹配时,才会采用这一条返回。
[ configuration D ]
}
location ~ /documents/Abc {
# 正则匹配:匹配任何以 /documents/Abc 开头的地址,匹配到以后,还要继续往下匹配。
# 只有后面的正则表达式没有匹配到且也没有更长的前缀匹配时,才会采用这一条返回。
[ configuration E ]
}
location ^~ /documents/ {
# 截断前缀匹配:匹配任何以 /documents/ 开头的地址,匹配到以后,停止往下搜索正则,采用这一条返回。
[ configuration F ]
}
location ~* \.(gif|jpg|jpeg)$ {
# 不区分大小写的正则匹配:匹配所有以 gif,jpg或jpeg 结尾的请求。
# 但是,如果请求地址是:http://localhost:8888/documents/c.jpg 时,会被 configuration F 先处理并直接返回。因为 ^~ /documents/ 是“截断前缀匹配” ,截断了,到达不了这一条正则。
[ configuration G ]
}
location /images/ {
# 普通路径前缀匹配:会继续往下,会发现 ^~ 存在。
# H和J的放置顺序是没有关系的。
# 只有后面的正则表达式没有匹配到且也没有更长的前缀匹配时,才会采用这一条返回。
[ configuration H ]
}
location ^~ /images/ {
# 截断前缀匹配:匹配任何以 /images/ 开头的地址,匹配到以后,停止往下搜索正则,采用这一条返回。
[ configuration I ]
}
location /images/abc {
# 普通路径前缀匹配:更长。
# H与I的放置顺序是没有关系的。
[ configuration J ]
}
location ~ /images/ {
# 正则匹配:匹配任何以 /images/ 开头的地址,匹配到以后,还要继续往下匹配。
# 只有后面的正则表达式没有匹配到且也没有更长的前缀匹配时,才会采用这一条返回。
[ configuration K ]
}

优先级验证

备注:我们暂且只记录优先级,不考虑uri和代理路径拼接逻辑。

场景1:精确匹配+默认缺省匹配

配置文件如下:

在这里插入图片描述

结论:

在这里插入图片描述

场景2:截断匹配+较长的截断匹配

配置文件如下:

在这里插入图片描述

结论:

在这里插入图片描述

场景3:截断匹配+较长的普通路径匹配+正则匹配

配置文件如下:

在这里插入图片描述

结论:

在这里插入图片描述

场景4:不区分大小写正则匹配+正则匹配

配置文件如下:

在这里插入图片描述

结论:

在这里插入图片描述

场景5:不区分大小写正则匹配+截断匹配

配置文件如下:

在这里插入图片描述

结论:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

于特洛夫斯基

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值