nginx中location的使用

nginx中location的使用

1、Location的语法规则

语法规则:location [=||*|^~] /uri/ {…}

下面详细解释上面出现的符号

符号 含义
= =开头表示精准匹配
^~ ^~开头表示url以某个常规字符串开头,可理解为匹配url路径(禁止正则匹配)
~ ~ 开头表示区分大小写的正则匹配,区分大小写
~* ~* 开头表示不区分大小写的正则匹配
!和!* !和!*分别为区分大小写不匹配及不区分大小写不匹配的正则
/ !和!*分别为区分大小写不匹配及不区分大小写不匹配的正则
2、匹配流程图

在这里插入图片描述

(1)精准匹配命中时,停止 location 动作,直接走精准匹配,

(2)一般匹配(含非正则)命中时,先收集所有的普通匹配,最后对比出最长的那一条

(3)如果最长的那一条普通匹配声明为非正则,直接此条匹配,停止 location

(4)如果最长的那一条普通匹配不是非正则,继续往下走正则 location

(5)按代码顺序执行正则匹配,当第一条正则 location 命中时,停止 location

3、安装echo

这里为了方便测试,使用了第三方的模块echo,方便输出结果,安装步骤如下:

(1)下载echo压缩包

wget https://github.com/openresty/echo-nginx-module/archive/v0.61.tar.gz

(2)解压

tar -zvxf

(3)配置

进入nginx的解压目录,输入如下命令,“=”号后面是echo的解压目录

./configure –add-module=/usr/local/src/echo-nginx-module-0.61/

(4)编译安装

make && make install

(5)验证

进入nginx的sbin目录(也可以配置环境变量,就不用进入sbin目录),输入./nginx -V查看

在这里插入图片描述

4、测试验证
server {

        listen       10088;
        server_name  123.25.95.148;
    
        #精准匹配测试
        #第1,2条虽然匹配,但第三条是精准匹配,出第三条结果
        #测试路径/equal/a/b/c
        location ~ /equal/(.*) {#被命中,但被下面的推断:location = /equal/a/b/c
                echo '/equal/*';
        }
        location  /equal/a/b {#被命中,但被下面的推断:location = /equal/a/b/c
                echo '/equal/a/b';
        }
        location = /equal/a/b/c {#被命中,直接执行,不等待
                echo '/equal/a/b/c';
        }
    
        #普通匹配测试
        #第1,2条虽然匹配,第三条匹配更长,出第三条结果
        #测试路径/match/a/b/c
        location /match/a {#被命中,但不是最长
                echo  "/match/a";
        }
        location /match/a/b {#被命中,但不是最长
                echo  "/match/a/b";
        }
        location /match/a/b/c {#被命中,且最长
                 echo  "/match/a/b/c";
        }
        location /match/a/b/c/d {#不命中
                echo  "/match/a/b/c/d"; 
        }
    
        #正则匹配覆盖普通匹配测试
        #会覆盖普通匹配,不会覆盖=和^~
        location =/re/a.js {#访问/re/a.js,不会被后面的正则覆盖
                echo 'match =';
        }
        location ^~ /re/a/b {#访问/re/a/b开头的路径,不会被后面的正则覆盖
                echo 'math ^~/re/a/b*';
        }
        location /re/a.htm {#访问/re/a.htm,会被后面的正则覆盖
                 echo 'match /re/a.htm';
        }
        location ~ /re/(.*)\.(htm|js|css)$ {#覆盖/re/a.htm路径
                echo "cover /re/$1.$2";
        }
    
        #正则匹配成功一条后,便不再走其它正则
        #最长正则匹配是第三个,但匹配第一个后便不往下走
        #测试路径/rex/a/b/c.htm
        location ~ /rex/.*\.(htm|js|css)$ {#覆盖/re/a.htm路径
                echo "match first";
        }
        location ~ /rex/a/(.*)\.(htm|js|css)$ {#覆盖/re/a.htm路径
                echo "match second";
        }
        location ~ /rex/a/b/(.*)\.(htm|js|css)$ {#覆盖/re/a.htm路径
                echo "match third";
        }


}
4、注意

网上有很多下面错误或者不完善的说法

1、正则匹配优先于匹配的一般匹配,其实这种说法是错误的,出现这种说法的原因是因为正则匹配在某些情况是会覆盖一般匹配,针对第二个问题,请详细查看我第2点描述的内容

2、当未使用=(严格匹配)时,如果url的内容刚好与localtion 的url内容完全一致的情况下,不会被正则覆盖,其实这种说法也是错误的,至少我做了实验测试过了。只有使用“=”、或者“^~”才不会使用正则匹配

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/111215.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Ubuntu 查看磁盘空间 及目录容量

    Ubuntu 查看磁盘空间 及目录容量Df 命令是 linux 系统以磁盘分区为单位查看文件系统 可以加上参数查看磁盘剩余空间 df hl 显示格式为 文件系统容量已用可用已用 挂载点以上面的输出为例 表示的意思为 HD 硬盘接口的第二个硬盘 b 第二个分区 2 容量是 75G 用了 75G 可用是 0 因此利用率是 100 被挂载到根分区目录上 下面是相关命令的解释 df hl 查看磁盘剩余空间 df h 查看每个根路径的分区大小 du sh 目录名 返回该目录的大小 du sm 文件夹 返回该文件夹总

    2025年8月26日
    4
  • navicat 15激活码【中文破解版】

    (navicat 15激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlWKAWTQAJR5-eyJsa…

    2022年3月22日
    54
  • 网络请求发生错误: Unsupported Media Type

    网络请求发生错误: Unsupported Media Type环信获取token时,请求失败UnsupportedMediaTypexutls发送json数据

    2022年5月15日
    42
  • Java服务器端结构[通俗易懂]

    Java服务器端结构[通俗易懂]数据库连接池:应用程序想要访问数据库中的数据,需要和数据库建立连接。而数据库连接池就是用来负责分配、管理和释放数据库连接,你可以把数据库连接池理解为一把钥匙,而数据库就是锁。没有数据库连接池 ,应用程序就不方便访问数据库。1)数据库连接池允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个 2)释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数

    2022年6月3日
    31
  • CPU介绍

    CPU内核主要分为两部分:运算器和控制器。(一)运算器cpu基本想到的是计算,因此有算数计算,还有逻辑计算单元以及移位简单的运算;fp运算单独拿出;要运算就需要输入数字,因此有寄存器组,即通用寄

    2021年12月24日
    53
  • pycharm 修改镜像源_如何设置linux服务器镜像源

    pycharm 修改镜像源_如何设置linux服务器镜像源由于国外的镜像源安装Python速度较慢,选择国内的镜像速度较快,这篇文章如要讲述如何设置国内镜像源。常用镜像源:清华:https://pypi.tuna.tsinghua.edu.cn/simple阿里云:http://mirrors.aliyun.com/pypi/simple/中国科技大学https://pypi.mirrors.ustc.edu.cn/simple/方法一:…

    2022年8月29日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号