nginx location匹配和优先级的示例讲解

智数追月鹤
• 阅读 942

文章不易,请关注公众号 毛毛虫的小小蜡笔,多多支持,谢谢。

语法和优先级

语法

location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }

上面的语法中,location后面第一个参数是可选的。

=,是精确匹配。当匹配到了,则结束。
^,是正则匹配,区分大小写。
^*,是正则匹配,不区分大小写。
^~,是前缀匹配。

第一个参数不填,后面跟着/uri。此时也是前缀匹配。只是优先级在正则匹配之后。
第一个参数不填,后面跟着/。此时也是前缀匹配。只是优先级在所有匹配之后。也就是都匹配不到,则匹配该location。

比如下面的配置:

location /uri {
    # ...
}
location / {
    # ...
}

优先级

当配置文件中有 =,优先匹配该 location,匹配到了,则结束匹配。匹配不到,则先找是否有 ^~。

有 ^~,则优先匹配该 location。匹配到了,则结束匹配。匹配不到,则按照配置文件顺序,从上到下匹配。
先匹配第一个正则,匹配到了,则结束。
匹配不到,则往下匹配。
如果没有一个正则都匹配不到,则匹配 /uri。有,则匹配该 location,然后结束。如果没有,则匹配 /。有,则匹配该 location,然后结束。没有,则提示404。

所以把 = 放到第一个位置,能提高匹配速度。

另外,location的所有匹配,都只对不带参数的请求的uri进行匹配的。
比如 /test 和 /test?a=1 是一样的。

Demo

精确匹配

比如访问地址是:http://localhost/test.png

// 输出4
server {
    listen       80;
    server_name  localhost;
    location ^~ /test.png {
        add_header Content-Type 'text/html;charset=utf-8';
        return 200 1;
    }
    location ~ /test.png {
        add_header Content-Type 'text/html;charset=utf-8';
        return 200 2;
    }
    location ~* /test.png  {
        add_header Content-Type 'text/html;charset=utf-8';
        return 200 3;
    }
    location = /test.png {
        add_header Content-Type 'text/html;charset=utf-8';
        return 200 4;
    }
}

因为配置中有 =,所以优先匹配,然后结束。

前缀匹配

优先前缀匹配:^~
前缀匹配:/



详情 请查看:毛毛虫的小小蜡笔

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
冴羽 冴羽
3年前
一份简单够用的 Nginx Location 配置讲解
前言Location是Nginx中一个非常核心的配置,这篇重点讲解一下Location的配置问题以及一些注意事项。语法关于Location,举个简单的配置例子:nginxhttpserverlisten80;servernamewww.yayujs.com;location/roo
Stella981 Stella981
3年前
Nginx配置https
一、开启nginx的ssl模块1.未安装过nginx,编译安装配置参数如下:./configure\prefix/usr/local/nginx\withpcre\withhttp\_ssl\_modulessl模块\withhttp\_stub\_status\_module\wit
Stella981 Stella981
3年前
Linux架构之Nginx 常见问题
第54章Nginx常见问题一、Nginx多Sever优先级在开始处理一个http请求时,nginx会取出header头中的Host变量,与nginx.conf中每个server的server_name进行匹配,由此决定到底由哪一个server来处理这个请求。但如果nginx配置多个相同的
Wesley13 Wesley13
3年前
4. Nginx模块
Nginx官方模块1.ngx\_http\_stub\_status\_modulehttp://nginx.org/en/docs/http/ngx\_http\_stub\_status\_module.html。(https://www.oschina.net/action/GoToLink?urlhttp%3A%2
Stella981 Stella981
3年前
Nginx 常见问题整理
Nginx常见问题整理1、Nginx常见问题1、相同server\_name多个虚拟主机优先级访问根据文件名顺序优先读取。使用ip访问的时候,也是根据文件名顺序优先读取。2、location匹配优先级进行普通字符精
Stella981 Stella981
3年前
Docker 部署SpringBoot项目不香吗?
  公众号改版后文章乱序推荐,希望你可以点击上方“Java进阶架构师”,点击右上角,将我们设为★“星标”!这样才不会错过每日进阶架构文章呀。  !(http://dingyue.ws.126.net/2020/0920/b00fbfc7j00qgy5xy002kd200qo00hsg00it00cj.jpg)  2
Stella981 Stella981
3年前
Nginx配置中Location的优先级
根据Nginx的官方文档,Location标签一共有四个修饰符,分别是:(1):表示完全匹配;(2)^~:匹配URI的前缀,并且后面的正则表达式不再匹配,如果一个URI同时满足两个规则的话,匹配最长的规则;(3)~:匹配正则表达式,大小写敏感;(4)~:匹配正则表达式,大小写不敏感;优先级:(1
Stella981 Stella981
3年前
Nginx 的 location 匹配规则
约定本文以Nginx1.17.6主线版为准。引言location是Nginx配置中的重要一环,用来配置动静分离、反向代理等功能。而location匹配规则,网上有太多错误的说法,今予以纠正并给出正确规则描述。最常见的错误最常见的错误之一,就是认为^~的优先级高于~,但实际上,我们
Stella981 Stella981
3年前
Nginx
!(https://imagestatic.segmentfault.com/255/117/25511790966008dc5b00fd8)Nginx进程模型分析在介绍Nginx的进程模型之前我们先来给大家解释下一些常见的名词,这能辅助我们更好的了解Nginx的进程模型。作为Web服务器,设计的初衷就是为了能够处理更多的客户端的请