当前位置: 首页 > news >正文

nginx(五):关于location匹配规则那些事

关于location匹配规则那些事

  • 1 概述
  • 2 语法
  • 3 匹配规则说明
    • 3.1 精确匹配
    • 3.2 前缀匹配(^~)
    • 3.3 正则表达式匹配(\~和\~*)
    • 3.4 普通前缀匹配
  • 4 匹配优先级
  • 5 注意事项
  • 6 总结

大家好,我是欧阳方超,可以我的公众号“欧阳方超”,后续内容将在公众号首发。在这里插入图片描述

1 概述

在nginx中,location块是一个重要的指令,用于定义如何处理特定的URI请求。本文将介绍location不同的匹配规则及它们的优先级。

2 语法

location语法格式

location [修饰符] URI {...
}

修饰符包括:
=(精确匹配)
^~(优先前缀匹配)
~(区分大小写正则)
~*(不区分大小写正则)
空(不写修饰符,表示普通前缀匹配)

3 匹配规则说明

3.1 精确匹配

使用等号(=)表示精确匹配,只有当请求URI与指定路径完全一致时,此location才会被选中。
示例:

location = exact/path {return 200 '精确匹配的内容';
}

请求必须完全匹配/path才会生效,例如:

[root@hadoop102 ~]# curl -k -L  http://192.168.25.4/exact/path
精确匹配的内容

下面的路径均匹配不到:

[root@hadoop102 ~]# curl -k -L  http://192.168.25.4/path1
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.24.0</center>
</body>
</html>
[root@hadoop102 ~]# curl -k -L  http://192.168.25.4/path/
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.24.0</center>
</body>
</html>

注意,curl命令后添加 -L 选项以跟随重定向,否则curl结果只会显示第一个重定向的响应,而不会看到后续的https请求和响应(我的nginx做了配置,会把http请求重定向为https请求)。
或者curl后直接写https请求:

[root@hadoop102 ~]# curl -k  https://192.168.25.4/exact/path
精确匹配的内容

精确匹配一般适用于需要严格匹配特定URI的场景,如某个特定的文件或资源。

3.2 前缀匹配(^~)

使用^~表示前缀匹配,如果请求URI以指定的前缀开始,且该location是所有非正则location中最长的匹配前缀,nginx将选择此规则并停止后续的正则表达式匹配。

location ^~ /prefix/ {return 200 '前缀匹配';}
[root@hadoop102 ~]# curl -k https://192.168.25.4/prefix/
前缀匹配

前缀匹配一般用户处理静态文件请求,提高性能,比如在/usr/local/nginx/resources/目录想放一张图片giraffe.jpg,location写成如下形式:

location ^~ /prefix/ {alias /usr/local/nginx/resources;}

可以通过访问https://192.168.25.4/prefix/giraffe.jpg请求到目录下的指定资源。

3.3 正则表达式匹配(~和~*)

~表示区分大小写的正则表达式匹配,~表示不区分大小写的正则表达式匹配。正则匹配适用于需要复杂匹配逻辑的场景,如文件扩展名或特定模式。例如下面的写法将会匹配所有以 .jpg, .jpeg 或 .png 结尾的请求,且区分大小写。

location ~ \.(gif|jpg|png)$ {return 200 '匹配的图片类型的请求';}
[root@hadoop102 ~]# curl -k https://192.168.25.4/test.gif
匹配的图片类型的请求
[root@hadoop102 ~]# curl -k https://192.168.25.4/test.Gif
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.24.0</center>
</body>
</html>

下面的写法将会匹配所有以.pdf或.doc结尾的请求,且不区分大小写。

location ~* \.(pdf|doc)$ {return 200 '匹配到文档类型的请求';}
[root@hadoop102 ~]# curl -k https://192.168.25.4/test.pdf
匹配到文档类型的请求
[root@hadoop102 ~]# curl -k https://192.168.25.4/test.pdF
匹配到文档类型的请求

使用注意事项
性能考虑:正则表达式比简单字符串或前缀匹配要慢,因此应尽量将常用且简单的路径放在前面,复杂的正则表达式放在后面,以提高性能。
避免过度复杂化:尽量使用简单明了的正则表达式,避免过于复杂的模式,这样有助于维护和理解配置。
测试与验证:使用工具或在线正则测试器来验证你的正则表达式是否按预期工作,以避免配置错误。

3.4 普通前缀匹配

普通前缀匹配是指没有指定任何修饰符的location指令,优先级最低,它用于捕获所有未被其他更具体的location规则匹配到的请求。通用匹配通常被称为“默认匹配”。在多个location规则中起到最后一道防线的作用。
通用匹配的配置形式为:

location / {# 配置内容
}

这个规则会匹配所有请求URI,包括那些没有被其他特定规则捕获的请求,它类似于编程语言中switch-acse语句的default分支。

4 匹配优先级

nginx处理请求时,不同location对请求有不同的优先级,具体优先级顺序如下:

  1. 精确匹配(=):最高优先级,完全匹配制定URI。
  2. 前缀匹配(^~):一旦找到前缀匹配,停止后续查找。
  3. 正则表达式匹配(~和~*):分为区分大小写和不区分大小写的正则匹配。

5 注意事项

  1. 正则表达式匹配时,不包含URI参数。例如对于请求"/test?arg=123",匹配时只考虑"/test"部分
  2. location中的URI结尾是否带"/“会影响匹配结果:
    location /test 可以匹配”/test"和"/test/"
    location /test/ 只能匹配"/test/"
  3. 如果多个location都可以匹配,按照优先级顺序只会执行一个
  4. 建议配置location时:
    优先使用精确匹配
    对于静态文件使用前缀匹配
    需要正则时优先使用^~避免混淆
    总是提供一个通用的location /作为默认匹配

6 总结

Nginx中的location块提供了多种方式来处理不同类型的请求。无论是静态文件服务、动态内容代理、URL重定向还是错误处理,合理地运用这些分类和优先级,可以帮助管理员高效地管理Web服务器,提高性能和用户体验。
我是欧阳方超,把事情做好了自然就有兴趣了,如果你喜欢我的文章,欢迎点赞、转发、评论加关注。我们下次见。

相关文章:

nginx(五):关于location匹配规则那些事

关于location匹配规则那些事 1 概述2 语法3 匹配规则说明3.1 精确匹配3.2 前缀匹配&#xff08;^~&#xff09;3.3 正则表达式匹配&#xff08;\~和\~*&#xff09;3.4 普通前缀匹配 4 匹配优先级5 注意事项6 总结 大家好&#xff0c;我是欧阳方超&#xff0c;可以我的公众号“…...

【论文阅读】Associative Alignment for Few-shot Image Classification

用于小样本图像分类的关联对齐 引用&#xff1a;Afrasiyabi A, Lalonde J F, Gagn C. Associative alignment for few-shot image classification[C]//Computer Vision–ECCV 2020: 16th European Conference, Glasgow, UK, August 23–28, 2020, Proceedings, Part V 16. Spri…...

acmessl.cn提供接口API方式申请免费ssl证书

目录 一、前沿 二、API接口文档 1、证书可申请列表 简要描述 请求URL 请求方式 返回参数说明 备注 2、证书申请 简要描述 请求URL 请求方式 业务参数 返回示例 返回参数说明 备注 3、证书查询 简要描述 请求URL 请求方式 业务参数 返回参数说明 备注 4、证…...

DBeaver如何快速格式化sql语句,真简单!

前言 我之前在使用DBeaver的时候&#xff0c;一直不知道其可以格式化sql语句&#xff0c;导致sql语句看起来比较杂乱&#xff0c;今天就来介绍下DBeaver如何格式化sql语句。 如何格式化sql语句 首先&#xff0c;我们打开一个sql窗口&#xff0c;在里面输入我们要查询的sql语…...

OpenCV C++ 计算两幅图像之间的多尺度结构相似性(MSSIM)

目录 一、定义与背景 二、计算流程 三、性质与特点 四、应用场景 五、代码实现 多尺度结构相似性(MSSIM)是一种用于衡量两幅图像之间相似度的指标,它基于结构相似性(SSIM)指数进行扩展,通过在不同尺度上计算SSIM来评估图像的整体质量。以下是对MSSIM的详细介…...

代码随想录第二十二天

回溯算法理论介绍 回溯算法是一种基于递归思想的算法设计技术&#xff0c;适用于解决需要构造所有解或找到特定解的组合问题。回溯的基本思路是通过系统地搜索所有可能的解决方案&#xff0c;然后逐步撤销不符合要求的选择&#xff0c;回到上一步继续尝试。这种算法最适合应用…...

【k8s】ClusterIP能http访问,但是不能ping 的原因

ClusterIP 服务在 Kubernetes 中是可以访问的&#xff0c;但通常无法通过 ping 命令来测试连通性。这主要是因为 ClusterIP 是一个虚拟 IP 地址&#xff0c;而不是实际分配给某个网络接口的 IP 地址。以下是一些原因和解释&#xff1a; 1. 虚拟 IP 地址 ClusterIP 是一个虚拟…...

【力扣打卡系列】单调栈

坚持按题型打卡&刷&梳理力扣算法题系列&#xff0c;语言为go&#xff0c;Day20 单调栈 题目描述 解题思路 单调栈 后进先出 记录的数据加在最上面丢掉数据也先从最上面开始 单调性 记录t[i]之前会先把所有小于等于t[i]的数据丢掉&#xff0c;不可能出现上面大下面小的…...

使用docker安装zlmediakit服务(zlm)

zlmediakit安装 zlmediakit安装需要依赖环境和系统配置&#xff0c;所以采用docker的方式来安装不容易出错。 docker pull拉取镜像(最新) docker pull zlmediakit/zlmediakit:master然后先运行起来 sudo docker run -d -p 1935:1935 -p 80:80 -p 8554:554 -p 10000:10000 -p …...

SOLID原则-单一职责原则

转载请注明出处:https://blog.csdn.net/dmk877/article/details/143447010 作为一名资深程序员越来越感觉到基础知识的重要性&#xff0c;比如设计原则、设计模式、算法等&#xff0c;这些知识的长期积累会让你突破瓶颈实现质的飞跃。鉴于此我决定写一系列与此相关的博客&…...

Transformer究竟是什么?预训练又指什么?BERT

目录 Transformer究竟是什么? 预训练又指什么? BERT的影响力 Transformer究竟是什么? Transformer是一种基于自注意力机制(Self-Attention Mechanism)的神经网络架构,它最初是为解决机器翻译等序列到序列(Seq2Seq)任务而设计的。与传统的循环神经网络(RNN)或卷…...

Jdbc批处理功能和MybatisPlus

文章目录 1. 序言2. JDBC批处理功能和rewriteBatchedStatements3. JDBC批量插入的测试4. MybatisPlus#ServiceImpl.saveBatch()5. 结语&#xff1a;如果对大家有帮助&#xff0c;请点赞支持。如果有问题随时在评论中指出&#xff0c;感谢。 1. 序言 MybatisPlus的ServiceImpl类…...

对于相对速度的重新理解

狭义相对论速度合成公式如下&#xff0c; 现在让我们尝试用另一种方式把它推导出来。 我们先看速度的定义&#xff0c; 常规的速度合成方式如下&#xff0c; 如果我们用速度的倒数来理解速度&#xff0c; 原来的两个相对速度合成&#xff0c; 是因为假定了时间单位是一样的&am…...

Scala的属性访问权限(一)默认访问权限

//eg:银行账户存钱取钱 // 账户类&#xff1a; // -balance() 余额 // -deposit() 存钱 // -withdraw() 取钱 // -transfer(to:账户,amount:Dobule)转账 package Test1104 //银行账户class BankAccount(private var balance:Int){def showMoney():Unit {println(s"…...

【算法】(Python)贪心算法

贪心算法&#xff1a; 又称贪婪算法&#xff0c;greedy algorithm。贪心地追求局部最优解&#xff0c;即每一步当前状态下最优选择。试图通过各局部最优解达到最终全局最优解。但不从整体最优上考虑&#xff0c;不一定全局最优解。步骤&#xff1a;从初始状态拆分成一步一步的…...

条件logistic回归原理及案例分析

前面介绍的二元、多分类、有序Logistic回归都属于非条件Logistic回归&#xff0c;每个个案均是相互独立关系。在实际研究中&#xff0c;还有另外一种情况&#xff0c;即个案间存在配对关系&#xff0c;比如医学研究中配对设计的病例对照研究&#xff0c;此时违反了个案相互独立…...

redis7学习笔记

文章目录 1. 简介1.1 功能介绍1.1.1 分布式缓存1.1.2 内存存储和持久化(RDBAOF)1.1.3 高可用架构搭配1.1.4 缓存穿透、击穿、雪崩1.1.5 分布式锁1.1.6 队列 1.2 数据类型StringListHashSetZSetGEOHyperLogLogBitmapBitfieldStream 2. 命令2.1 通用命令copydeldumpexistsexpire …...

重学Android:自定义View基础(一)

前言 作为一名安卓开发&#xff0c;也被称为大前端&#xff0c;做一个美观的界面&#xff0c;是我们必备的基础技能&#xff0c;可能在开发中我们最常用的是系统自带的View&#xff0c;因为他能满足绝大部分需求&#xff0c;难一点的我们也可以上Github上找个三方库使用&#…...

前端好用的网站分享——CSS(持续更新中)

1.CSS Scan 点击进入CSS Scan CSS盒子阴影大全 2.渐变背景 点击进入color.oulu 3.CSS简化压缩 点击进入toptal 4.CSS可视化 点击进入CSS可视化 这个强推&#xff0c;话不多说&#xff0c;看图! 5.Marko 点击进入Marko 有很多按钮样式 6.getwaves 点击进入getwaves 生…...

华为HarmonyOS借助AR引擎帮助应用实现虚拟与现实交互的能力3-获取设备位姿

设备位姿描述了物体在真实世界中的位置和朝向。AR Engine提供了世界坐标下6自由度&#xff08;6DoF&#xff09;的位姿计算&#xff0c;包括物体的位置&#xff08;沿x、y、z轴方向位移&#xff09;和朝向&#xff08;绕x、y、z轴旋转&#xff09;。通过AR Engine&#xff0c;您…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...