nginx对location的处理流程
2022-04-04 01:22:19 4 举报
以流程图的方式展示nginx处理location指令的过程,参考https://nginx.org/en/docs/http/ngx_http_core_module.html#location,如有错误,欢迎邮件联系iliguanghui@foxmail.com指正。
作者其他创作
大纲/内容
全部遍历之后,没有符合条件的location
使用这个location的配置
否
是
找到了一个或多个符合匹配规则的location
是否存在使用字符串前缀匹配规则的location
按照location在server块中出现的顺序进行排序
使用字符串前缀匹配,不精准匹配,如果被匹配到,立刻返回(不进行正则表达式匹配)修饰符是“^~”
找到了一个符合匹配规则的location
从所有使用字符串前缀匹配模式的location中选中匹配URI的location
server配置块中的location块
没有进行基于字符串前缀规则的检查或者检查后找不到符合条件的location
1. 先使用字符串前缀匹配,后使用正则表达式匹配2. 正则表达式匹配的优先级更高3. 基于正则表达式匹配的location的顺序很重要
使用正则表达式、区分大小写的location修饰符是“~”
按照匹配字符串是否区分大小写分类
对server块中的location按照匹配模式进行分类
使用正则表达式匹配的location
如果被匹配到,还要不要进行正则表达式匹配
结束搜索location块的过程
使用正则表达式匹配的location块出现在server块中的顺序很重要,因为要从上到下(从前到后)匹配,首次匹配到的location块胜出
对请求做规范化处理
一个location块能且仅能使用一种匹配模式,使用不同匹配模式的location可能交错出现,如果要排序,是同类间排序
是否存在使用正则表达式匹配规则的location
在前面的基于字符串前缀匹配规则的检查中,匹配到了一个location
使用字符串前缀匹配、不精准匹配,如果被匹配到,还要继续进行正则表达式匹配没有修饰符
对已经排序过的location块按照从上到下(从前到后)的顺序检查,找到第一个符合匹配条件的location后退出此次遍历
不管在前面基于字符串前缀匹配规则检查过程中,有没有找到符合规则的location,都使用本次找到的location作为最终结果(也就是说,如果前面也找到了,就会被本次找到的覆盖)
结束搜索location块的过程向客户端返回一个301永久重定向,重定向到匹配字符串前缀(原URL加上最后的斜线)
精准匹配修饰符是“=”
使用正则表达式、不区分大小写的location修饰符是“~*”
排过序的location块
无法进行基于正则表达式匹配规则的检查,使用前面基于字符串前缀匹配的结果作为最终结果
规范的URI
使用最长前缀匹配原则从中选择一个location
基于字符串前缀匹配的规则检查结束,此时符合条件的有0个location
遍历所有的这种location
找不到符合匹配规则的location
请求中的URI
使用字符串前缀匹配的location之间的顺序不重要,因为排除精准匹配规则外,剩下的要按照最长前缀配置规则比较,谁前缀长谁胜出,与出现顺序无关
基于字符串前缀匹配的规则检查结束,此时符合条件的有1个location记住这个location,作为配置的保底
结束搜索location块的过程以错误状态退出
使用前面基于字符串前缀匹配的结果作为最终结果
按照是否是精准匹配分类
基于最长前缀匹配原则选出的location是否有”^~\"修饰符(是否要进行后续的正则表达式匹配规则检查
使用字符串前缀匹配的location
是否有和URI精准匹配的location
收藏
0 条评论
下一页