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

亦凉 2022-12-28 07:14 35阅读 0赞

准则

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

分类

前缀匹配:

  • location XXX {}

    • 普通前缀匹配
  • location ^~ XXX {}

    • 特殊前缀匹配,如果击中则断路,不再判断正则匹配规则,参加下述流程

精确匹配:

  • location = XXX {}

    • 普通精确匹配

正则匹配:

  • location ~ XXX {}

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

    • 不区分大小写的正则匹配

流程

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

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

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

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

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

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

总结

  • 从逻辑上讲,还是跟着原则来,就是匹配程度越高越能被击中,正则匹配程度肯定比前缀匹配程度高
  • 从物理上讲,NGINX会先记录前缀击中情况,再判断正则,根据正则结果判断是否使用前缀

发表评论

表情:
评论列表 (有 0 条评论,35人围观)

还没有评论,来说两句吧...

相关阅读

    相关 nginx location匹配规则

    location匹配命令 ~ \波浪线表示执行一个正则匹配,区分大小写 ~\ \表示执行一个正则匹配,不区分大小写 ^~ \^~表示普通字符匹配,如果该选项匹配,只匹