NGINX的location的匹配规则迷?不迷!
准则
URL击中规则程度越高,优先级越高
分类
前缀匹配:
location XXX {}
- 普通前缀匹配
location ^~ XXX {}
- 特殊前缀匹配,如果击中则断路,不再判断正则匹配规则,参加下述流程
精确匹配:
location = XXX {}
- 普通精确匹配
正则匹配:
location ~ XXX {}
- 区分大小写正则匹配
location ~* XXX {}
- 不区分大小写的正则匹配
流程
URL——>精确匹配——>正则匹配(优先级按配置顺序)——>前缀匹配(优先级按击中程度)——>404
以上任一规则如能击中则返回。
引用标准文档来说明执行流程
NGINX首先检查使用前缀字符串(指的是)定义的位置(前缀位置)。其中,将选择并记住具有最长匹配前缀的位置。然后按照在配置文件中出现的顺序检查正则表达式。正则表达式的搜索在第一个匹配项上终止,并使用相应的配置。如果未找到与正则表达式匹配的内容,则使用前面记住的前缀位置的配置。
NGINX在基础流程中做了两个例外:
location = XXX {}
:如果精确匹配,那么肯定优先级最高location ^~ XXX {}
:前缀匹配断路,参考上述描述,当前缀匹配后,不用再考虑正则匹配情况
总结
- 从逻辑上讲,还是跟着原则来,就是匹配程度越高越能被击中,正则匹配程度肯定比前缀匹配程度高
- 从物理上讲,NGINX会先记录前缀击中情况,再判断正则,根据正则结果判断是否使用前缀
还没有评论,来说两句吧...