zoukankan      html  css  js  c++  java
  • 高性能Web服务器Nginx的配置与部署研究(16)小议location匹配模式优先级

    1 location 的匹配符

    1.1 等于匹配符:=

    等于匹配符就是等号,特点可以概括为两点:

    1. 精确匹配
    2. 不支持正则表达式

    1.2 空匹配符

    空匹配符的特点是:

    1. 匹配以指定模式开始的 URI
    2. 不支持正则表达式

    1.3 正则匹配符:~

    正则匹配符是可以使用正则表达式的匹配符。不过这里要强调的是,一般来说~是指:

    区分大小写的正则匹配
    

    ~*表示:

    不区分大小写的正则匹配
    

    但是对于一些对大小写不敏感的操作系统,这两者没有区别。另外一个就是^~,其表示以指定模式开始的正则匹配。

    1.4 内部访问符:@

    一般用于错误页面等,这个暂不讨论。

    2 匹配符优先级

    1. =
    2. 空匹配符,满足精确匹配时
    3. ^~
    4. ~~*
    5. 空匹配符,满足以指定模式开始时的匹配时

    这样说比较抽象,我们来看例子吧。

    2.1 等于匹配符与精确匹配时的空匹配符

    看下面的例子(用到我们此前一起完成的Hello World模块):

    location /poechant {
        hello_world no1;
    }
    
    location = /poechant {
        hello_world no2;
    }
    

    如果我们的请求是http://my.domian/poechant,则我们发现两个location都与请求的 URI 匹配,这时根据我们的优先级顺序,第一个是精确匹配时的空匹配符,第二个是等于匹配符,所以第二个的优先级高,也就是应该输出:

    hello_world, no2
    

    同时也说明 Nginx 的 locatoin 不是按照配置文件中的书写顺序来匹配的。

    2.2 精确匹配时的空匹配符与正则匹配的^~

    下面这个例子中,两者开始都精确匹配了,连这个正则匹配都是精确匹配。

    location ^~ ^/poechant$ {
        hello_world no1;
    }
    
    location /poechant {
        hello_world no2;
    }
    

    匹配哪一个?你测试一下,会得到:

    hello_world, no2
    

    与我们上面说的优先级顺序相吻合。

    2.3 其他匹配优先级比较的实例

    -

  • 相关阅读:
    c# 启动线程的方式
    c# 打开文件夹获取所有文件
    windows server 2008 R2 SP1 安装SQL Server 2008 R2时提示 "此操作系统不支持此版本的 SQL Server 版本"
    mongodb 备份 指定用户名密码
    c# 线程启动的两种方式与传参
    vs 2015 密钥
    c# 时间格式yyyy-MM-ddTHH:mm:ss
    c# oledb sql 报错 标准表达式中数据类型不匹配
    CentOS下yum安装dnsmasq,并强制替换为最新版
    使用QUOTA(磁盘配额)来限制用户空间
  • 原文地址:https://www.cnblogs.com/breg/p/4043844.html
Copyright © 2011-2022 走看看