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

相关文章

MySQL 8 中的一个强大功能 JSON_TABLE示例详解

《MySQL8中的一个强大功能JSON_TABLE示例详解》JSON_TABLE是MySQL8中引入的一个强大功能,它允许用户将JSON数据转换为关系表格式,从而可以更方便地在SQL查询中处理J... 目录基本语法示例示例查询解释应用场景不适用场景1. ‌jsON 数据结构过于复杂或动态变化‌2. ‌性能要

Python实现终端清屏的几种方式详解

《Python实现终端清屏的几种方式详解》在使用Python进行终端交互式编程时,我们经常需要清空当前终端屏幕的内容,本文为大家整理了几种常见的实现方法,有需要的小伙伴可以参考下... 目录方法一:使用 `os` 模块调用系统命令方法二:使用 `subprocess` 模块执行命令方法三:打印多个换行符模拟

MySQL字符串常用函数详解

《MySQL字符串常用函数详解》本文给大家介绍MySQL字符串常用函数,本文结合实例代码给大家介绍的非常详细,对大家学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql字符串常用函数一、获取二、大小写转换三、拼接四、截取五、比较、反转、替换六、去空白、填充MySQL字符串常用函数一、

Java中Arrays类和Collections类常用方法示例详解

《Java中Arrays类和Collections类常用方法示例详解》本文总结了Java中Arrays和Collections类的常用方法,涵盖数组填充、排序、搜索、复制、列表转换等操作,帮助开发者高... 目录Arrays.fill()相关用法Arrays.toString()Arrays.sort()A

Python 字典 (Dictionary)使用详解

《Python字典(Dictionary)使用详解》字典是python中最重要,最常用的数据结构之一,它提供了高效的键值对存储和查找能力,:本文主要介绍Python字典(Dictionary)... 目录字典1.基本特性2.创建字典3.访问元素4.修改字典5.删除元素6.字典遍历7.字典的高级特性默认字典

Nginx安全防护的多种方法

《Nginx安全防护的多种方法》在生产环境中,需要隐藏Nginx的版本号,以避免泄漏Nginx的版本,使攻击者不能针对特定版本进行攻击,下面就来介绍一下Nginx安全防护的方法,感兴趣的可以了解一下... 目录核心安全配置1.编译安装 Nginx2.隐藏版本号3.限制危险请求方法4.请求限制(CC攻击防御)

MySQL 主从复制部署及验证(示例详解)

《MySQL主从复制部署及验证(示例详解)》本文介绍MySQL主从复制部署步骤及学校管理数据库创建脚本,包含表结构设计、示例数据插入和查询语句,用于验证主从同步功能,感兴趣的朋友一起看看吧... 目录mysql 主从复制部署指南部署步骤1.环境准备2. 主服务器配置3. 创建复制用户4. 获取主服务器状态5

nginx中端口无权限的问题解决

《nginx中端口无权限的问题解决》当Nginx日志报错bind()to80failed(13:Permissiondenied)时,这通常是由于权限不足导致Nginx无法绑定到80端口,下面就来... 目录一、问题原因分析二、解决方案1. 以 root 权限运行 Nginx(不推荐)2. 为 Nginx

一文详解如何使用Java获取PDF页面信息

《一文详解如何使用Java获取PDF页面信息》了解PDF页面属性是我们在处理文档、内容提取、打印设置或页面重组等任务时不可或缺的一环,下面我们就来看看如何使用Java语言获取这些信息吧... 目录引言一、安装和引入PDF处理库引入依赖二、获取 PDF 页数三、获取页面尺寸(宽高)四、获取页面旋转角度五、判断

Spring Boot中的路径变量示例详解

《SpringBoot中的路径变量示例详解》SpringBoot中PathVariable通过@PathVariable注解实现URL参数与方法参数绑定,支持多参数接收、类型转换、可选参数、默认值及... 目录一. 基本用法与参数映射1.路径定义2.参数绑定&nhttp://www.chinasem.cnbs