• nginx——location 优先级


    一、 location 的匹配符
    1.等于匹配符:=
    等于匹配符就是等号,特点可以概括为两点:
    精确匹配
    不支持正则表达式
    2.空匹配符
    空匹配符的特点是:
    匹配以指定模式开始的 URI
    不支持正则表达式
    3.正则匹配符:~
    正则匹配符是可以使用正则表达式的匹配符。不过这里要强调的是,

    一般来说~是指:区分大小写的正则匹配
    而~*表示:         不区分大小写的正则匹配
    但是对于一些对大小写不敏感的操作系统,这两者没有区别。 

    ^~表示只匹配字符串,不查询正则表达式

    二、优先级的实例

    location ~ ^/poechant$ {
       return  400;
    }
    
    location =/poechant {
      return  403;
    }

    结果显示 403 forbdden

    location ~ ^/poechant$ {
       return  400;
    }
    
    location /poechant {
      return  403;
    }

    结果显示 400 Bad Request

    根据以上可以大体判断了解  location的优先级别以及流程。

    还需要验证是不是事实

    1、首先精确匹配 也就是带着 =的location  找到之后直接结束解析过程并返回。

    2、其次匹配普通匹配,并记录最长的匹配,此时首先不返回。匹配最长的。

    3、再匹配正则表达式,以~开始的,正则表达式,按照顺序从上到下匹配,找到匹配之后立即返回,没有匹配到则返回普通匹配的最长的匹配。如果普通匹配没有匹配到页面,则返回 404 not found。

    优先级别    精准匹配 = >正则匹配 >普通匹配(比如 /a   /a/1.jpg 等 包括 ^~表示之匹配字符串不查询正则表达式)

    #1 
    location / {
         return 404; 
    }
    
    #2
    #location /a/ {
    #    return 404;
    #}
    
    #3
    location ~* .jpg$ {
        return 403;
    }
    
    #4
    location ~ ^/a/ {
       return 404;
    }
    
    
    #5
    location ^~ /a/ {
        return 402;
    }
    
    #6
    location  /a/1.jpg {
        return 401;
    }
    
    #7
    location = /a/1.jpg {
        return 400;
    }

    测试的时候,先要将#2全部注释掉,不然会认为#2 与#4 完全一样。会提示:重复配置,提示如下

    [emerg]: duplicate location "/a/" in D:
    ginx-0.8.7/conf/nginx.conf:53

    每一次都访问 localhost:8080/a/1.jpg

    第一次访问  说明匹配 #7 精准匹配

     

    把7注释掉  然后访问     说明 3正则匹配匹配成功

    接下来互换3跟4

    #4
    location ~ ^/a/ {
       return 404;
    }
    
    #3
    location ~* .jpg$ {
        return 403;
    }

    再一次访问   说明正则表达式 是按照从上往下的顺序匹配的  匹配成功就停止  同时也验证了 匹配的顺序是 首先 匹配普通匹配  并记录最长的匹配   然后匹配正则表达式 ,找到之后

    停止匹配。

    把 3、4注释掉   访问  匹配 6成功  普通匹配匹配最长的

    注释掉 6之后  匹配5成功   ^~ 以指定的 模式开始的 

  • 相关阅读:
    Pytest中参数化之Excel文件实战
    PyCharm 专业版 2018激活(pycharm-professional-2018.2.4.exe)
    python语言编写一个接口测试的例子,涉及切割获取数据,读取表格数据,将结果写入表格中
    webdriver之UI界面下拉框的选择
    git的安装与详细应用
    安装jenkins
    python对数据库mysql的操作(增删改查)
    批量执行测试用例
    面向对象中多态的讲解+工厂设计模式的应用与讲解
    面向对象
  • 原文地址:https://www.cnblogs.com/timelesszhuang/p/4628951.html
Copyright © 2020-2023  润新知