Nginx配置之location的匹配优先级浅析
前言
Nginx配置中的 server块中的 location用来匹配请求URI,以便对不通的URI进行不通的处理。
location类型和成功匹配的条件
- location=expression{}精准匹配,只有URI和expression完全相同,才算匹配成功;
- locationexpression{}普通匹配,只要URI前部分的字符与expression相同就算匹配成功;
- location^~expression{}普通匹配,只要URI前部分字符与expression相同就算匹配成功;
- location~regex{}正则匹配(区分大小写);
- location~*regex{}正则匹配(不区分大小写);
总结可分为三大类:精准匹配、普通匹配和正则匹配。
匹配逻辑与优先级
对于一个进入Nginx的请求来讲,其URI可能符合多个 location的匹配条件,但这条请求最终只会被一个location逻辑所处理(重定向不算),那么,匹配时肯定有优先级之分。Nginx的匹配逻辑是这样的:
1.执行精准匹配
若请求URI与 location=相匹配(符合精准匹配条件),则执行该 location的内容,不再进行其他匹配,否则见下一条。
2.执行普通匹配
接下来Nginx会将URI与所有普通匹配的 location进行比较(无论是 ^~类型还是无符号类型),然后找出匹配度最高的 location,若该 location为 ^~类型,则停止匹配,执行该location内容;若匹配度最高的 location为无符号类型,则保留这个无符号 location,继续进行下面的正则匹配;若URI不符合任何普通匹配 location的条件,则直接进入下一步。
3.执行正则匹配
正则的匹配与 location的顺序相关,Nginx会从上至下进行匹配,若匹配到一个 location,则执行该 location逻辑,忽略后面所有的正则 location,终止匹配;若一个正则都没匹配上,则执行之前保留的那个无符号 location,若之前没有保留,则直接返回404。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。