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

news2024/9/16 10:47:46

文章目录

  • 前言
    • 优先级顺序
    • 优先级顺序(详解)
      • 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 ~* /";
        }

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2117072.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Idea Mac代码调试常用快捷键~

Mac截图 commandShift4 idea英文大写转小写 commandShiftU 功能:查看类的实现和继承父类的方法 快捷键 fncommandF12 鼠标点击打开 功能:查看当前方法的上游方法 选中方法,controloptionH 功能:CommandB是查看本类的方法 功能&…

Matlab simulink建模与仿真 第十一章(端口及子系统库)【下】

参考视频:simulink1.1simulink简介_哔哩哔哩_bilibili 八、触发使能子系统 1、Enabled and Triggered Subsystem触发使能子系统概述 触发使能子系统其实是触发子系统和使能子系统二者的结合,当触发端口传来触发信号时,使能端口的输入需要大…

TitleBar:打造高效Android标题栏的新选择

在Android应用开发中,标题栏是用户界面的重要组成部分。一个好的标题栏不仅能够提升应用的专业感,还能增强用户体验。然而,传统的标题栏实现方式往往存在代码冗余、样式不统一、性能开销大等问题。今天,我们将介绍一个名为TitleBa…

自定义类型:结构体(续)

目录 一. 结构体的内存对齐 1.1 为什么存在内存对齐? 1.2 修改默认对齐数 二. 结构体传参 三. 结构体实现位段 一. 结构体的内存对齐 在前面的文章里我们已经讲过一部分的内存对齐的知识,并举出了两个例子,我们再举出两个例子继续说明&…

python进阶篇-day08-数据结构与算法(线性结构介绍与链表实现)

数据的存储和组织形式 程序 数据结构 算法 一. 算法介绍 概述目的 都是可以提高程序的效率(性能), 面试高频考点 数据结构介绍 数据的存储和组织形式, 同样的空间, 不同的结构, 存储的数据不同, 操作方式也不同 算法介绍 为了解决实际的业务问题, 而考虑出来的方法和思路 …

龙芯+FreeRTOS+LVGL实战笔记(新)——06添加二级按钮

本专栏是笔者另一个专栏《龙芯+RT-Thread+LVGL实战笔记》的姊妹篇,主要的区别在于实时操作系统的不同,章节的安排和任务的推进保持一致,并对源码做了完善与优化,各位可以先到本人主页下去浏览另一专栏的博客列表(目前已撰写36篇,图1所示),再决定是否订阅。此外,也可以…

超强的截图工具:PixPin

你是否还在为寻找一款功能强大、操作简便的截图工具而烦恼?市面上那么多工具,常常让人无从选择。今天,想给大家安利一款神器——PixPin,一款真正解放双手的截图工具。 想象一下,你只需要按下快捷键就能轻松完成多种截…

雷电9模拟器安装magisk和lsposed

模拟器环境配置 1、开启root 2、开启System.vmdk可写入 安装magisk 1、新建模拟器、开启root权限、并安装debug版magisk 下载地址去上面吾爱论坛作者文章下载吧!支持他一下! 2、打开magisk的app,点击安装 如果弹出获取权限,直接…

【Socket网络编程原理实践】

socket 基于 TCP/IP协议实现,在网络模型中属于传输层 Java 网络编程中的核心概念 IP 地址:用于标识网络中的计算机端口号:用于标识计算机上的应用程序或进程Socket(套接字):网络通信的基本单位&#xff0…

冒泡排序算法介绍

冒泡排序算法介绍 如果真的累了,就拉上窗帘关上手机关掉闹钟深呼吸一口气钻进被窝,好好地睡一觉,难熬的日子总需要一些温暖,而什么都不如被窝的温暖来的踏实。 冒泡排序是一种经典的排序算法,它通过重复遍历待排序的序…

如何恢复回收站中已删除/清空的文件

回收站清空后如何恢复已删除的文件?是否可以恢复永久删除的文件?或者最糟糕的是,如果文件直接被删除怎么办?本文将向您展示清空回收站后恢复已删除数据的最佳方法。 回收站清空后如何恢复已删除的文件? “回收站清空后…

从零开始搭建GPU深度学习环境(pytorch)

傻乎乎的我,突然发现我自己的笔记本电脑居然有gpu,这个电脑是我弟在2017年购入的。 电脑已经按照了cpu环境,现在增加gpu环境 参考torch的cpu版本和gpu版本有什么区别 torch与cuda版本_mob64ca13f6035c的技术博客_51CTO博客 前言&#xff1a…

Vue3使用Uni-ui的popup弹出层组件

由于uni-ui中有些组件文档的基于vue2编写的,比如popup组件 下面是vue3的写法 除了文档中要求的aleterDialog外,还得利用v-if设置一个isDialog判断 // template // script 解决

数学建模笔记——TOPSIS[优劣解距离]法

数学建模笔记——TOPSIS[优劣解距离法] TOPSIS(优劣解距离)法1. 基本概念2. 模型原理3. 基本步骤4. 典型例题4.1 矩阵正向化4.2 正向矩阵标准化4.3 计算得分并归一化4.4 python代码实现 TOPSIS(优劣解距离)法 1. 基本概念 C. L.Hwang和 K.Yoon于1981年首次提出 TOPSIS(Techni…

【Linux网络】详解TCP协议(1)

🎉博主首页: 有趣的中国人 🎉专栏首页: Linux网络 🎉其它专栏: C初阶 | C进阶 | 初阶数据结构 小伙伴们大家好,本片文章将会讲解 TCP协议 的相关内容。 如果看到最后您觉得这篇文章写得不错&am…

力扣每日一题 有序数组的平方 双指针 逆向思维

Problem: 977. 有序数组的平方 👨‍🏫 灵神题解 class Solution {public int[] sortedSquares(int[] nums) {int n nums.length;int [] ans new int[n];int p n-1;int i 0;int j n-1;while(p > 0){int x nums[i] * nums[i];int y nums[j] * n…

结构体小知识

目录 前言1.结构体数组1.1结构体数组理解1.2结构体数组知识运用1.3 -> 操作符 2. 知识拓展 前言 本期blog是对上一期指针知识的知识补充,如果各位大佬感兴趣的话,可以结合起来一起看! 1.结构体数组 1.1结构体数组理解 结构体数组在本…

关系的规范化与范式详解

在数据库设计中,关系的规范化是确保数据结构合理性、减少冗余和异常的关键步骤。如果你是一个数据库设计的初学者,这篇文章将为你深入浅出地讲解 关系规范化 和 范式 的核心概念,并通过简洁的示例帮助你加深理解。 关系的规范化:…

JavaScript进阶day1

目录 1.作用域 1.1 局部作用域 1.2 全局作用域 1.3 作用域链 1.4 JS垃圾回收机制 1.4.1 什么是垃圾回收机制? 1.4.2 内存的生命周期 1.4.3 算法说明 1.5 闭包 1.6 变量提升 2.函数进阶 2.1 函数提升 2.2 函数参数 2.2.1 动态参数 2.2.2 剩余参数 2.…

GB2312编码(加2020H、8080H原理)

区位码、内码、国标码 转换及原理 背景答题思考相关资料 背景 问题: 某汉字的国标码为5650H,那么它的机内码为( B )。A E6E0H B D6D0H C C6C0H D 8080H答题 思考 为什么要加上2020H和8080H?区位码、内码、国标码怎么转换非常简单…