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

web群集--nginx配置文件location匹配符的优先级顺序详解及验证

文章目录

  • 前言
    • 优先级顺序
    • 优先级顺序(详解)
      • 1. 精确匹配(Exact Match)
      • 2. 正则表达式匹配(Regex Match)
      • 3. 前缀匹配(Prefix Match)
    • 匹配规则的综合应用
    • 验证优先级

前言

location的作用
在 NGINX 中,location 指令用于定义如何处理特定的请求 URI。由于网站往往需要不同的处理方式来适应各种请求,NGINX 提供了多种匹配方法,包括前缀匹配、精确匹配和正则表达式匹配。了解这些匹配方法的优先级是优化配置的关键。

优先级顺序

下列以优先级从高到低排序:
= 开头表示精确匹配
^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。
~ 开头表示区分大小写的正则匹配
~* 开头表示不区分大小写的正则匹配
!和!* 分别为区分大小写不匹配及不区分大小写不匹配的正则
/ 通用匹配,任何请求都会匹配到。

优先级顺序(详解)

1. 精确匹配(Exact Match)

精确匹配是 location 指令中优先级最高的匹配方法。它通过使用 = 修饰符来实现,表示只匹配完全相同的 URI。

配置示例

location = /app {# 精确匹配 URI 为 /app 的请求
}

优先级: 最高。如果有一个精确匹配的 location,Nginx 会优先使用它,不会进一步考虑其他匹配规则。
用途: 用于需要精确匹配特定 URI 的场景,例如特定页面或 API 端点。

2. 正则表达式匹配(Regex Match)

正则表达式匹配具有较高的优先级,在精确匹配之后进行处理。Nginx 使用 ~ 或 ~* 修饰符来表示正则表达式匹配,其中 ~ 区分大小写,而 ~* 不区分大小写。

配置示例

location ~ \.php$ {# 匹配所有以 .php 结尾的 URI
}
location ~* \.(jpg|jpeg|png|gif)$ {# 匹配所有以 .jpg、.jpeg、.png 或 .gif 结尾的 URI,大小写不敏感
}

3. 前缀匹配(Prefix Match)

前缀匹配是最常用的匹配方法,适用于 URI 开头的字符串匹配。没有使用 =、~ 或 ~* 修饰符的 location 指令默认为前缀匹配。

配置示例

location /images/ {# 匹配以 /images/ 开头的 URI
}
location /static/ {# 匹配以 /static/ 开头的 URI
}

优先级: 最低。在精确匹配和正则表达式匹配之后,如果 URI 以指定的前缀开头,则使用前缀匹配。
用途: 用于匹配和处理以特定路径开头的 URI,如静态资源目录、应用路径等。

匹配规则的综合应用

在实际应用中,NGINX 的匹配优先级可以组合使用来实现更复杂的逻辑。例如,可以结合精确匹配、正则表达式匹配和前缀匹配来处理不同类型的请求。

配置示例

location = / {# 精确匹配根路径
}
location ~ \.php$ {# 正则匹配 PHP 文件
}
location /images/ {# 前缀匹配以 /images/ 开头的请求
}

在上面的配置中,请求 / 会直接匹配到第一个 location 块。
请求 /example.php 会匹配到正则表达式匹配的 location 块。
请求 /images/logo.png 会匹配到前缀匹配的 location 块。

验证优先级

我们可以简单配置nginx的配置文件来验证location匹配符的优先级

配置文件

    server {listen       80;server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;location / {default_type text/html;return 200 "location /";}location = / {default_type text/html;return 200 "location = /";}location ~  / {default_type text/html;return 200 "location ~ /";}location ~* / {default_type text/html;return 200 "location ~* /";}
}

访问
在这里插入图片描述
去掉

        location = / {default_type text/html;return 200 "location = /";}

再访问
在这里插入图片描述
去掉

        location ~  / {default_type text/html;return 200 "location ~ /";}

再访问
在这里插入图片描述
去掉

        location ~* / {default_type text/html;return 200 "location ~* /";}

再访问
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 防蓝光护眼灯有用吗?五款防蓝光效果好的护眼台灯推荐
  • 《JavaEE进阶》----11.<SpringIOCDI【Spring容器+IOC详解+DI介绍】>
  • ArcGIS Pro SDK (十三)地图创作 4 设备
  • 基于鸿蒙API10的RTSP播放器(八:音量和亮度调节功能的整合)
  • LeetCode --- 414周赛
  • 深入理解Linux中的多路复用技术:select、poll与epoll
  • 玄机靶场初体验
  • 目标检测-小目标检测方法
  • 《ORANGE‘s 一个操作系统的实现》-- ubuntu14.04下bochs2.3.5的配置与使用
  • 【第34章】Spring Cloud之SkyWalking分布式日志
  • JVM四种垃圾回收算法以及G1垃圾回收器(面试)
  • 今日leetCode 242.有效的字母异位词
  • 云服务器部署DB-GPT项目
  • .Net 执行Linux下多行shell命令方法
  • 无线领夹麦克风哪个牌子好,口碑最好的麦克风品牌,领夹麦推荐
  • Angular 2 DI - IoC DI - 1
  • CentOS从零开始部署Nodejs项目
  • ES6核心特性
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • JavaScript新鲜事·第5期
  • Magento 1.x 中文订单打印乱码
  • webpack+react项目初体验——记录我的webpack环境配置
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 排序算法之--选择排序
  • 如何使用 JavaScript 解析 URL
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 实习面试笔记
  • 微服务入门【系列视频课程】
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • Semaphore
  • # 飞书APP集成平台-数字化落地
  • # 详解 JS 中的事件循环、宏/微任务、Primise对象、定时器函数,以及其在工作中的应用和注意事项
  • #14vue3生成表单并跳转到外部地址的方式
  • (C++17) optional的使用
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (二)springcloud实战之config配置中心
  • (力扣)1314.矩阵区域和
  • (三)mysql_MYSQL(三)
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (转) 深度模型优化性能 调参
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • (转)项目管理杂谈-我所期望的新人
  • (状压dp)uva 10817 Headmaster's Headache
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .NET Core 通过 Ef Core 操作 Mysql
  • .net 按比例显示图片的缩略图
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • @Autowired和@Resource的区别
  • @NestedConfigurationProperty 注解用法
  • @Resource和@Autowired的区别
  • @SuppressWarnings(unchecked)代码的作用