Nginx location匹配模式与规则详解

2025-04-24 05:50

本文主要是介绍Nginx location匹配模式与规则详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《Nginxlocation匹配模式与规则详解》:本文主要介绍Nginxlocation匹配模式与规则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教...

一、环境

Nginx 1.19

二、匹配模式

在 Nginx 的location指令里,常用的匹配模式有:

  • 精准模式(=)
  • 前缀模式,不继续匹配正则(^~),
  • 前缀模式,继续匹配正则,
  • 正则模式,大小写敏感(~)
  • 正则模式,大小写不敏感(~*)

1. 精准模式

location = /pa编程th {
    default_type text/html;
    return 200 'hello';
}

2. 前缀模式(不继续匹配正则)

location ^~ /path {
    default_type text/html;
    return 200 'hello';
}

3. 前缀模式(继续匹配正则)

location /path {
    default_type text/html;
    return 200 'hello';
}

4. 正则模式(大小写敏感)

location ~ /path {
    default_type text/html;
    return 200 'hello';
}

5. 正则模式(大小写不敏感)

location ~* /path {
    default_type text/html;
    return 200 'hello';
}

Nginx会按照 精准模式 -> 前缀模式 -> 正则模式 的顺序来匹配。

精准模式优先级最高,匹配到后就不再继续匹配其它模式。而前缀模式匹配到后,还要视乎指令的配置情况,来决定要不要继续匹配正则模式。

三、需要注意的地方

1. 命中多个正则模式时的优先级

看例子:

# 正则模式(大小写敏感)
location ~ /a {
    default_type text/html;
    return 200 '111';
}

# 正则模式(大小写敏感)
location ~ /a/b {
    default_type text/html;
    return 200 '222';
}

如果访问http://localhost/a/b,会命中哪个location?答案是第一个。

因为两个location都是正则模式(无论是否大小写敏感),从上之下,哪个先匹配到就哪个负责处理

2. 命中多个前缀模javascript式时的优先级

# 前缀模式(继续匹配正则)
location /a {
    default_type text/html;
    return 200 '111';
}

# 前缀模式(继续匹配正则)
location /a编程/b {
    default_type text/html;
    return 200 '222';
}
  • 访问http://localhost/a,命中第一个;
  • 访问http://localhost/a/b,命中第二个;
  • 访问http://localhost/a/b/c,命中第二个;

简单来说,哪个location匹配到的字符串最长,就由哪个来处理,比如http://localhost/a/b/c能匹配到的最长字符串是/a/b,所以由第二个location来处理。

前缀模式(不继续匹配正则)也是同样的匹配规则。

3. 命中多个不同模式时的优先级

# 前缀模式(不继续匹配正则)
location ^~ /a {
    default_type text/html;
    return 200 '111';
}

# 前缀模式(继续匹配正则)
location /a/b {
    default_type text/html;
    return 200 '333';
}

# 正则模式(大小写敏感)
location ~ /a/b {
    default_type text/html;
    return 200 '222';
}

访问http://localhost/a/b,会命中第三个location

前面两个location都是前缀模式,由匹配字符串最长的处理(即第二个)。第二个location编程有阻止继续匹配正则,于是又继续匹配第三个location(正则模式),所以最后是由第三个location处理。

4. 两种前缀模式不能同时存在

看例子:

# 前缀模式(不继续匹配正则)
location ^~ /a {
    default_type text/html;
    return 200 '333';
}

# 前缀模式(继续匹配正则)
location /a {
    default_type text/html;
    return 200 '444';
}

上面这段配置 Nginx 会报错,因为在路径相同的情况下,这两种模式不能共存。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持China编程(www.chinasem.cn)。

这篇关于Nginx location匹配模式与规则详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1154349

相关文章

检查 Nginx 是否启动的几种方法

《检查Nginx是否启动的几种方法》本文主要介绍了检查Nginx是否启动的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1. 使用 systemctl 命令(推荐)2. 使用 service 命令3. 检查进程是否存在4

C++ move 的作用详解及陷阱最佳实践

《C++move的作用详解及陷阱最佳实践》文章详细介绍了C++中的`std::move`函数的作用,包括为什么需要它、它的本质、典型使用场景、以及一些常见陷阱和最佳实践,感兴趣的朋友跟随小编一起看... 目录C++ move 的作用详解一、一句话总结二、为什么需要 move?C++98/03 的痛点⚡C++

MySQL中between and的基本用法、范围查询示例详解

《MySQL中betweenand的基本用法、范围查询示例详解》BETWEENAND操作符在MySQL中用于选择在两个值之间的数据,包括边界值,它支持数值和日期类型,示例展示了如何使用BETWEEN... 目录一、between and语法二、使用示例2.1、betwphpeen and数值查询2.2、be

python中的flask_sqlalchemy的使用及示例详解

《python中的flask_sqlalchemy的使用及示例详解》文章主要介绍了在使用SQLAlchemy创建模型实例时,通过元类动态创建实例的方式,并说明了如何在实例化时执行__init__方法,... 目录@orm.reconstructorSQLAlchemy的回滚关联其他模型数据库基本操作将数据添

Java中ArrayList与顺序表示例详解

《Java中ArrayList与顺序表示例详解》顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构,:本文主要介绍Java中ArrayList与... 目录前言一、Java集合框架核心接口与分类ArrayList二、顺序表数据结构中的顺序表三、常用代码手动

JAVA项目swing转javafx语法规则以及示例代码

《JAVA项目swing转javafx语法规则以及示例代码》:本文主要介绍JAVA项目swing转javafx语法规则以及示例代码的相关资料,文中详细讲解了主类继承、窗口创建、布局管理、控件替换、... 目录最常用的“一行换一行”速查表(直接全局替换)实际转换示例(JFramejs → JavaFX)迁移建

JAVA线程的周期及调度机制详解

《JAVA线程的周期及调度机制详解》Java线程的生命周期包括NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING和TERMINATED,线程调度依赖操作系统,采用抢占... 目录Java线程的生命周期线程状态转换示例代码JAVA线程调度机制优先级设置示例注意事项JAVA线程

详解C++ 存储二进制数据容器的几种方法

《详解C++存储二进制数据容器的几种方法》本文主要介绍了详解C++存储二进制数据容器,包括std::vector、std::array、std::string、std::bitset和std::ve... 目录1.std::vector<uint8_t>(最常用)特点:适用场景:示例:2.std::arra

C++构造函数中explicit详解

《C++构造函数中explicit详解》explicit关键字用于修饰单参数构造函数或可以看作单参数的构造函数,阻止编译器进行隐式类型转换或拷贝初始化,本文就来介绍explicit的使用,感兴趣的可以... 目录1. 什么是explicit2. 隐式转换的问题3.explicit的使用示例基本用法多参数构造

Android使用java实现网络连通性检查详解

《Android使用java实现网络连通性检查详解》这篇文章主要为大家详细介绍了Android使用java实现网络连通性检查的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录NetCheck.Java(可直接拷贝)使用示例(Activity/Fragment 内)权限要求