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. ASP.NET Core 中使用 Redis 实现分布式缓存:Docker、IDistributedCache、StackExchangeRedis

    安装和配置docker (略)........... ASP.NET Core 使用分布式缓存 ASP.NET Core 中,支持使用多种数据库进行缓存,ASP.NET Core 提供了统一的接口给开 ...

  2. RocksDB-键值存储

    存储和访问数百PB的数据是一个非常大的挑战,开源的RocksDB就是FaceBook开放的一种嵌入式.持久化存储.KV型且非常适用于fast storage的存储引擎.   传统的数据访问都是RPC, ...

  3. C# 开发工具Visual Studio 介绍

    Visual Studio Community (社区版) 这个版本的 Visual Studio 是免费的,具备以前 Professional 版的功能.使用时间有许可限制.它对开源项目和培训.学术 ...

  4. MySQL插入修改和删除

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

  5. Win10 20H2 家庭版 环境变量

    20H2 家庭版设置环境变量,此电脑--->属性,弹出的是新版本的设置界面,选择左侧的"关于",在最右侧的"相关设置"里面,选择"高级系统设置& ...

  6. mysql8.0无备份通过idb文件恢复数据过程、idb文件修复和tablespace id不一致处理

    周末突然接到一位一年多没联系的妹妹打来电话,"刘哥,快来救救我",我脑海瞬间冒出妙瓦底,电信火苲马扁.....,当时就冒汗了,心想这个妹子怎么被... 问其原由,原来是他们公司服务 ...

  7. react时时获取表单数据

    import React, { Component } from "react"; export class TestHanderClick extends Component { ...

  8. ThreeJs-14HTML混合3D渲染

    一.css渲染器基本使用 使用场景:经常在一些3D物体左右还会跟随一些文字等,实际都是标签,应用场景非常广泛 先完成基本的3D,月球围绕地球转,这里就是给月球加了sin函数 然后现在就先创建一个标签体 ...

  9. 告别 DeepSeek 系统繁忙,七个 DeepSeek 曲线救国平替入口,官网崩溃也能用!

    前言 DeepSeek作为一款备受瞩目的国产大模型,以其强大的功能和卓越的性能赢得了众多用户的青睐.然而,随着用户量的激增,DeepSeek官网近期频繁遭遇服务器繁忙甚至崩溃的问题,给广大用户带来了不 ...

  10. 解决微信小程序原生云开发退款报错“特约子商户商户号未授权服务商的产品权限”的问题

    背景:微信小程序云开发支付没问题,退款时就会报这个错. 现象: 解决方法流程: 1.打开微信小程序开发者工具上面的云开发界面: 2.进入设置: 3.其他设置: 需要授权退款API权限,我这里已经授权了 ...