Nginx的路径匹配规则

Nginx的匹配规则用location指令来实现,Nginx 的location指令用于匹配请求的 URI(请求路径),并根据匹配结果执行特定的处理指令。location是实现动静分离、URL 重写、反向代理等功能的核心模块之一.

location匹配规则分类

location支持多种匹配模式,包括精确匹配、前缀匹配、正则匹配等

精确匹配(=

优先级最高。当请求的URI与location后面的字符串完全相同时,Nginx会选择这个location块进行处理。(这个好理解,就是路径完全匹配,一模一样,优先级最高)

示例

location = /favicon.ico {
# 处理/favicon.ico的请求
}

只有当请求URI严格为/favicon.ico时,上述location块才会被使用。

最长前缀匹配(^~

第二优先级。请求的URI以某个location后面的字符串开头,并且这个字符串是最长的(或者使用了^~修饰符),Nginx会选择这个location块。但请注意,^~修饰符实际上会停止后续的正则匹配搜索。

示例

   location ^~ /hello {
return 601;
} location ^~ /hellow {
return 602;
} location ^~ /hello/world {
return 603;
} location ~ /hello {
return 604;
}

对于请求/hello,满足 601和 604,实际返回601,就是因为^~优先级高于正则匹配;

对于请求/hellow,满足 601和 602,实际返回602,因为最长前缀匹配原则;

正则表达式匹配(~~*

第三优先级。正则表达式匹配允许定义更复杂的URI匹配模式。~表示区分大小写的正则匹配,而~*表示不区分大小写的正则匹配。

Nginx会按照配置文件中的顺序逐个检查正则表达式location块,直到找到第一个匹配的块。因此,正则表达式的顺序很重要。

示例:

location ~ \.(gif|jpg|png)$ {
# 处理以.gif、.jpg或.png结尾的请求(区分大小写)
}
location ~* \.(GIF|JPG|PNG)$ {
# 处理以.GIF、.JPG或.PNG结尾的请求(不区分大小写)
}

对于请求/images/photo.jpg,第一个location块将被匹配(如果请求是区分大小写的)。

普通前缀匹配(无修饰符)

第四优先级。普通前缀匹配也按照配置文件中出现的先后顺序进行匹配,先出现的location指令优先匹配。

示例:

   location /hello {
return 601;
} location /hellow {
return 602;
}

对于请求/hellow,满足 601和 602,实际返回602,证明满足长前缀匹配原则

默认匹配(/

优先级最低。如果请求的URI与任何特定的location块都不匹配,Nginx将使用默认的location块(如果有的话)。通常,默认的location块是一个不带任何修饰符的location /块。

示例:

location / {
# 处理所有其他请求
}

总结

Nginx的location匹配规则优先级可以总结为:

  • 精确匹配(=

  • 最长前缀匹配(^~),但会停止后续的正则匹配搜索

  • 正则表达式匹配(~~*),按配置顺序

  • 普通前缀匹配(无修饰符),也按配置顺序

  • 默认匹配(/

注意事项

  • 正则匹配与顺序:正则 location 的匹配顺序很重要,因为 Nginx 会按照配置文件中定义的顺序进行匹配。

  • proxy_pass 的路径替换:在配置 proxy_pass 时,需要注意 location 后面的 URI 是否包含斜杠(/),这会影响请求的转发路径。通常建议 location 和 proxy_pass 要么都加斜杠,要么都不加。

  • 性能优化:将精确匹配放在前面,可以减少不必要的正则匹配,提高 Nginx 的处理效率。

nginx中的路径匹配规则详解(location规则)的更多相关文章

  1. Nginx中502和504错误详解

    在使用Nginx时,经常会碰到502 Bad Gateway和504 Gateway Time-out错误,下面以Nginx+PHP-FPM来分析下这两种常见错误的原因和解决方案. 1.502 Bad ...

  2. Nginx 常用全局变量 及Rewrite规则详解

    每次都很容易忘记Nginx的变量,下面列出来了一些常用 $remote_addr //获取客户端ip $binary_remote_addr //客户端ip(二进制) $remote_port //客 ...

  3. 53个Oracle语句优化规则详解(转)

    Oracle sql 性能优化调整  1. 选用适合的ORACLE优化器        ORACLE的优化器共有3种:a. RULE (基于规则)   b. COST (基于成本) c. CHOOSE ...

  4. Linux下nginx编译安装教程和编译参数详解

    这篇文章主要介绍了Linux下nginx编译安装教程和编译参数详解,需要的朋友可以参考下 一.必要软件准备1.安装pcre 为了支持rewrite功能,我们需要安装pcre 复制代码代码如下: # y ...

  5. Apache Rewrite 规则详解

    在开篇之前: 我想说这篇文章其实是我刚刚接触Rewrite的时候学习的文档,应属转载,但是在这里我不想写明原地址,原因是文章中大多数给出的配置命令经实验都是错误的.需要原文的可以在谷歌上搜索一下&qu ...

  6. Java 中的异常和处理详解

    Java 中的异常和处理详解 原文出处: 代码钢琴家 简介 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误 ...

  7. css样式继承规则详解

    css样式继承规则详解 一.总结 一句话总结:继承而发生样式冲突时,最近祖先获胜(最近原则). 1.继承中哪些样式不会被继承? 多数边框类属性,比如象Padding(补白),Margin(边界),背景 ...

  8. Tomcat中的Server.xml配置详解

    Tomcat中的Server.xml配置详解 Tomcat Server的结构图如下: 该文件描述了如何启动Tomcat Server <Server> <Listener /> ...

  9. Windows下Nginx Virtual Host多站点配置详解

    Windows下Nginx Virtual Host多站点配置详解 此教程适用于Windows系统已经配置好Nginx+Php+Mysql环境的同学. 如果您还未搭建WNMP环境,请查看 window ...

  10. C#中的Linq to Xml详解

    这篇文章主要介绍了C#中的Linq to Xml详解,本文给出转换步骤以及大量实例,讲解了生成xml.查询并修改xml.监听xml事件.处理xml流等内容,需要的朋友可以参考下 一.生成Xml 为了能 ...

随机推荐

  1. mac sublime text3-快捷键

    cmd+n 新建页面 cmd+数字键 切换到对应页面 cmd+p 搜索跳转到对应页 cmd+w 关闭页面 cmd+j 合并一行 cmd+d 选中当前单词,继续敲可以选中多个 cmd+l 选中当前行 c ...

  2. 微服务实战系列(七)-网关springcloud gateway-copy

    1. 场景描述 springcloud刚推出的时候用的是netflix全家桶,路由用的zuul,但是据说zull1.0在大数据量访问的时候存在较大性能问题,2.0就没集成到springcloud中了, ...

  3. w3cschool-HBase官方文档-2数据模型

    HBase数据模型 2018-03-03 15:20 更新 HBase数据模型 在 HBase 中,数据模型同样是由表组成的,各个表中又包含数据行和列,在这些表中存储了 HBase 数据.在本节中,我 ...

  4. MySQL插入修改和删除

    原文链接:https://blog.liuzijian.com/post/36d9bcaa-2ba7-26ca-6f97-b8ef7a058e95.html 插入 支持一次性插入多行,支持子查询 IN ...

  5. 从cos下载文件

    新建test.sh脚本 #!/bin/bash set -e cospath=https://11111.cos.ap-beijing.myqcloud.com/emr/hive/script/202 ...

  6. JVM堆内存分析,分析工具jmap heap

    一.查看堆信息 jmap -heap 33146 Debugger attached successfully. Server compiler detected. JVM version is 25 ...

  7. AtCoder [ABC351E] Jump Distance Sum 题解 [ 绿 ] [ 数学 ]

    原题 场上差点就想出来了,就差一个旋转坐标轴了. 初步分析 首先来看如何判断两个点能不能走到,这可以看成下面的一张网格图,相同颜色的格子相互连通. 因此根据瞪眼法,可以把这些格子分为 $ (x_i + ...

  8. RocketMQ实战—9.营销系统代码初版

    大纲 1.基于条件和画像筛选用户的业务分析和实现 2.全量用户促销活动数据模型分析以及创建操作 3.Producer和Consumer的工程代码实现 4.基于抽象工厂模式的消息推送实现 5.全量用户促 ...

  9. 烟草行业如何用低代码+ BI 实现数字化转型?

    在数字经济的大潮中,烟草行业正迎来重大的发展契机.国家层面的政策引导和战略规划为行业的数字化转型提供了明确的方向.<数字中国>的愿景逐步变为现实,国家信息化发展战略的深入推进,为烟草行业的 ...

  10. Salt key 系统的接口

    官方文档:https://docs.saltstack.com/en/3000/ref/wheel/all/salt.wheel.key.html Wheel 系统包装了Salt key 系统,以编程 ...