美文网首页
Nginx中的location规则补充

Nginx中的location规则补充

作者: 虾游于海 | 来源:发表于2020-07-12 13:12 被阅读0次

这是一篇关于Nginx中Location规则的补充说明。重点在于测试路径规则和^~规则以及正则规则同时匹配的情况,可以参考我的上一篇文章。

网络上有些文章总结了下列优先级顺序

    首先精确匹配 =
    其次前缀匹配 ^~
    其次是按文件中顺序的正则匹配
    然后匹配不带任何修饰的前缀匹配。
    最后是交给 / 通用匹配
    当有匹配成功时候,停止匹配,按当前匹配规则处理请求

针对这个说法,有些不妥之处
示例,有如下规则配置,在配置中使用return直接返回内容,仅仅用于说明问题

server {
    listen       80;
    server_name  localhost;

    location ^~ /a/b/ {
        # 规则1
        return 200 "^~ location";
    }

    location /a/b/c/ {
        # 规则2
        return 200 "path location";
    }

    location ~* \.(txt) {
        # 规则3
        return 200 "regex text";
    }
}

当有如上配置规则时,
当我们访问 /a/b/c/xxx.txt 时,以上三条规则均可满足条件。那么返回的信息是什么呢?如果按照如前所述的规则匹配优先级,^~ /a/b/ 的优先级似乎最高,但事实上的结果呢。返回的是

regex text

没错,响应的文本是 "regex text",而不是意料中的"^~ location"。但这个现象能说明正则表达式的优先级高于path吗?
我们使用 /a/b/xxx.txt 访问时 ,得到的结果却是 "^~ location",规则1的优先级高于规则3.
结果是不是很懵?
再次强调nginx的路径匹配过程 参考我的上一篇文章https://www.jianshu.com/p/20b67ae85b51
一、检查请求uri是否与某个=规则匹配,如果有,直接应用规则,终止后续匹配。
二、nginx首先检查所有路径匹配规则配置项,包括"^~"规则和没有前导符号的规则,选择并记住和当前请求uri匹配度最长的配置项。但这个时候,并不会启用相关的配置,而仅仅是记住。
三、判断上一步中选择下来的路径规则是否包含 ^~ ,如果包含,则使用该条规则,终止后续匹配
四、按配置顺序进行正则表达式检查,匹配到第一条合适的正则表达式时,使用该条规则,终止后续匹配。
五、使用步骤三选择出来的路径匹配规则。

总结:

  • 路径匹配规则一定会执行,并且会将匹配到的规则记录下来待用。然后判断路径匹配规则是否 ^~ 开头,如果是,直接应用规则,如果不是,进行正则匹配,并应用匹配到的正则规则。
  • 路径匹配规则的优先级和顺序无关,和匹配度相关。

相关文章

  • Nginx中的location规则补充

    这是一篇关于Nginx中Location规则的补充说明。重点在于测试路径规则和^~规则以及正则规则同时匹配的情况,...

  • nginx 正则和路由规则

    nginx 参考 location uri匹配规则 语法规则: location [=||*|^~] /uri/ ...

  • nginx基础知识

    nginx主配置文件 nginx.conf 配置文件结构如下: location匹配规则 语法规则location...

  • nginx 配置静态文件

    [nginx try_files的理解] Nginx location的匹配规则 location 匹配优先级 示例

  • Nginx location的正则匹配

    Nginx location的正则匹配 Nginx正则匹配的匹配规则

  • nginx中location匹配规则

    一、root URL:http://192.168.1.105/html/index.html先匹配到locati...

  • Nginx路由匹配规则的一些理解

    使用过nginx的同学都知道,在nginx配置文件中通过location配置路由转发规则,配置语法为: 中括号中为...

  • Nginx Location

    Nginx Location规则 语法规则: 首先精确匹配 =-》其次以xx开头匹配^~-》然后是按文件中顺序的正...

  • nginx location 规则

    location匹配顺序 "="前缀指令匹配,如果匹配成功,则停止其他匹配 普通字符串指令匹配,顺序是从长到短,匹...

  • nginx location 规则

    一. 语法规则 二. 常用规则 通过域名访问网站首页时,直接转发给后端应用服务器,或者返回一个静态首页 处理静态文...

网友评论

      本文标题:Nginx中的location规则补充

      本文链接:https://www.haomeiwen.com/subject/tvmgcktx.html