NGINX的location的匹配规则迷?不迷!

准则

URL击中规则程度越高,优先级越高

分类

前缀匹配:

  • location XXX {}
    • 普通前缀匹配
  • location ^~ XXX {}
    • 特殊前缀匹配,如果击中则断路,不再判断正则匹配规则,参加下述流程

精确匹配:

  • location = XXX {}
    • 普通精确匹配

正则匹配:

  • location ~ XXX {}
    • 区分大小写正则匹配
  • location ~* XXX {}
    • 不区分大小写的正则匹配

流程

URL---->精确匹配---->正则匹配(优先级按配置顺序)---->前缀匹配(优先级按击中程度)---->404

以上任一规则如能击中则返回。

引用标准文档来说明执行流程

NGINX首先检查使用前缀字符串(指的是)定义的位置(前缀位置)。其中,将选择并记住具有最长匹配前缀的位置。然后按照在配置文件中出现的顺序检查正则表达式。正则表达式的搜索在第一个匹配项上终止,并使用相应的配置。如果未找到与正则表达式匹配的内容,则使用前面记住的前缀位置的配置。

NGINX在基础流程中做了两个例外:

  • location = XXX {}:如果精确匹配,那么肯定优先级最高
  • location ^~ XXX {}:前缀匹配断路,参考上述描述,当前缀匹配后,不用再考虑正则匹配情况

总结

  • 从逻辑上讲,还是跟着原则来,就是匹配程度越高越能被击中,正则匹配程度肯定比前缀匹配程度高

  • 从物理上讲,NGINX会先记录前缀击中情况,再判断正则,根据正则结果判断是否使用前缀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值