Nginx的location块相关知识积累(包括常用的正则匹配表达式的介绍)
Nginx的location块相关知识积累
01-location块的优先级
注意:如果Nginx的配置中有多个location块,那么各location块的匹配优先级并不是完全按照代码的先后顺序来决定各location优先级的。而是按下面的规则来决定的:
在 Nginx 中,location
块的匹配是按照以下原则的:
-
前缀匹配: 具有更长前缀的
location
会优先匹配。如果一个location
的前缀是另一个location
的前缀,那么较长前缀的location
会被优先匹配。 -
正则表达式匹配: 如果存在正则表达式匹配的
location
,那么正则表达式匹配会优先于前缀匹配。在正则表达式匹配中,越具体的规则(越长或者包含特定字符)会优先匹配。
比如有下面的Nginx的location配置代码:
location / {proxy_pass http://127.0.0.1:55113;}#301 Not Config#拒绝访问的文件location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md){return 404;}#静态文件location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)${expires 30d;error_log off;access_log /dev/null;}location ~ .*\.(js|css)?${expires 12h;error_log off;access_log /dev/null;}
在这个 Nginx 配置中,按照以上原则,location
块的优先级顺序是:
-
/
:最基本的前缀匹配,匹配所有请求。因为它是最短的前缀匹配,而不是正则匹配,所以是最低优先级。 -
~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
:正则表达式匹配,匹配特定文件路径的请求。 -
~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
:正则表达式匹配,匹配以指定后缀结尾的静态文件请求。 -
~ .*\.(js|css)?$
:正则表达式匹配,匹配以指定后缀结尾的静态文件请求。
即第1个匹配的优先级是最低的,即上面的4个location块被分成了两组:
第一组是第1个,属于前缀匹配;
第二组是第2、3、4个,都属于正则匹配。
如果一个请求能同时匹配第一组和第二组,那么将使用第二组中的location块,因为第二组的优先级比第一级的优先级高。如果一个请求能同时匹配第2、3、4个 location 块,将选择第2个 location 块,因为它在配置文件中出现得更早。
02-常见正则表达式
关于正则表达式,之前已经写了些文章了,在看以下内容前可以先复习一下。
01-Nginx中的正则匹配表达式操作符~
和~*
的含义
02-正则表达式中+ 与 * 有啥区别?
03-Python的正则表达式re模块的compile()方法有什么作用?
04-正则表达式中的方括号[]有什么用?
05-正则表达式中的大括号-花括号{}有什么用?
06-Python正则表达式re模块的相关知识积累与博文汇总–这篇文章强烈建看一下!
02-01-~
和~*
~
操作符表示区分大小写的匹配。
~*
操作符表示不区分大小写的匹配。
02-02-~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
~
操作符表示区分大小写的匹配。
^
操作符表示匹配字符串的开头位置,详情见:Python正则表达式re模块的相关知识积累与博文汇总的第04点。这里操作符^
和/
合起来的^/
表示匹配以斜杠/
开头的路径。
\
表示转义,因为点在正则表达式中是一个特殊字符,表示匹配任意字符(除了换行符)。所以\.
是为了匹配实际的点。
所以整个正则表达式:
~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
表示匹配以下面为前缀的URL路径:
/.user.ini
/.htaccess
/.git
/.svn
/.project
/LICENSE
/README.md
即网站根目录下的文件或目录.user.ini、.htaccess、.git、.svn、.project、LICENSE、README.md
是禁止访问的。
注意:URL路径:/.svn/configure.txt 也是被匹配的。因为前缀/.svn/
得到了匹配。
02-3-~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
出自:
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)${expires 30d;error_log off;access_log /dev/null;}
~
操作符表示区分大小写的匹配。
.*
:.
在正则表达式中是一个特殊字符,表示匹配任意字符(除了换行符)。*
表示匹配前面的模式零次或多次。整个合起来是说“匹配任意字符零次或多次”。
\.
:其中的\
表示转义,因为点在正则表达式中是一个特殊字符,表示匹配任意字符(除了换行符)。所以\.
是为了匹配实际的点。
$
:表示在字符串的结尾处进行匹配。
所以上面这个正则表达式是匹配图片类静态资源。
02-04-~ .*\.(js|css)?$
~ .*\.(js|css)?$
出自:
location ~ .*\.(js|css)?${expires 12h;error_log off;access_log /dev/null;}
~
操作符表示区分大小写的匹配。
.*
:.
在正则表达式中是一个特殊字符,表示匹配任意字符(除了换行符)。*
表示匹配前面的模式零次或多次。整个合起来是说“匹配任意字符零次或多次”。
\.
:其中的\
表示转义,因为点在正则表达式中是一个特殊字符,表示匹配任意字符(除了换行符)。所以\.
是为了匹配实际的点。
?
: 这表示前面的字符(这里是 (js|css)
)是可选的,可以出现零次或一次。在这里,它表示文件名可能以 .js
或 .css
结尾,也可能没有这两者。
$
:表示在字符串的结尾处进行匹配。
所以上面这个正则表达式是匹配以 .js
、 .css
或以.
结尾但无具体的文件后缀名结尾的静态资源。
03-常用语句
03-1-expires
例1:
location ~ .*\.(js|css)?${expires 12h;error_log off;access_log /dev/null;}
例2:
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)${expires 30d;error_log off;access_log /dev/null;}
expires 12h;
: 此指令设置内容的过期时间。它告诉客户端(浏览器)将文件缓存 12 小时 (12h
)。这可以通过在指定的时间范围内减少客户端反复下载相同静态文件的需求来提高网站性能。
expires 30d;
: 此指令设置内容的过期时间。它告诉客户端(浏览器)将文件缓存 30 天 (30d
)。这可以通过在指定的时间范围内减少客户端反复下载相同静态文件的需求来提高网站性能。
03-2-error_log off
例:
location ~ .*\.(js|css)?${expires 12h;error_log off;access_log /dev/null;}
error_log off;
: 此指令关闭了匹配此位置的请求的错误日志记录。这意味着与 JavaScript 和 CSS 文件相关的请求错误将不会被记录。
03-3-access_log
例:
location ~ .*\.(js|css)?${expires 12h;error_log off;access_log /dev/null;}
access_log /dev/null;
: 此指令将访问日志路径设置为 /dev/null
,有效地禁用了与此位置匹配的请求的访问日志记录。访问日志记录有关每个请求的信息,通过将其重定向到 /dev/null
,你正在丢弃这些特定请求的详细访问日志信息。如果不需要为某些静态文件生成详细的访问日志,这样做可以减少磁盘 I/O 并提高性能。
相关文章:
Nginx的location块相关知识积累(包括常用的正则匹配表达式的介绍)
Nginx的location块相关知识积累 01-location块的优先级 注意:如果Nginx的配置中有多个location块,那么各location块的匹配优先级并不是完全按照代码的先后顺序来决定各location优先级的。而是按下面的规则来决定的: 在 Nginx 中,…...
rabbitMq确认机制之ConfirmType
配置方式 Bean(name "connectionFactory")Primarypublic ConnectionFactory normalConnectionFactory(Value("${spring.rabbitmq.username}") String username,Value("${spring.rabbitmq.password}") String password,Value("${spring.rab…...

ubuntu下QT搭建Android开发环境
一、前言 用QT开发android和直接使用android开发的区别 使用Qt开发Android应用和直接使用Android开发工具(例如Android Studio)有一些区别,主要体现在开发工具、语言、界面设计和性能等方面: 开发工具: Qt Creat…...
QT 做一个登录,注册的跳转页面
思路: 1.登录需要判断账号与密码是否想等,相等才可跳转新页面,匹配失败输入框提示”账号密码不匹配”。 2.注册不需要判断,直接跳转新页面即可。 widget.cpp文件 #include "widget.h" #include "ui_widget.h&qu…...

数据库第十第十一章 恢复和并发简答题
数据库第一章 概论简答题 数据库第二章 关系数据库简答题 数据库第三章 SQL简答题 数据库第四第五章 安全性和完整性简答题 数据库第七章 数据库设计简答题 数据库第九章 查询处理和优化简答题 1.什么是数据库中的事务?它有哪些特性?这些特性的含义是什么…...
Vue3:利用vueusejs键盘绑定
VueUse 键盘事件名 onKeyDown - 别名 onKeyStroke(key, handler, {eventName: ‘keydown’})onKeyPressed - 别名onKeyStroke(key, handler, {eventName: ‘keypress’})onKeyUp - 别名 onKeyStroke(key, handler, {eventName: ‘keyup’}) // 绑定回车事件// https://develo…...
Python与设计模式--设计原则
23种计模式之 前言 (5)单例模式、工厂模式、简单工厂模式、抽象工厂模式、建造者模式、原型模式、(7)代理模式、装饰器模式、适配器模式、门面模式、组合模式、享元模式、桥梁模式、(11)策略模式、责任链模式、命令模式、中介者模…...

Spire.Office 8.11.2 for NET fix Crack
内容摘自来自互联网------或者SDK官方本身手册 Spire.Doc for .NET A professional Word .NET library designed to create, read, write, convert and print Word document files in any .NET ( C#, VB.NET, ASP.NET, .NET Core, Xamarin ) application with fast and high qu…...

ubuntu终端代理配置
ubuntu浏览器的无需手动设置,主要解决在终端中的配置问题,按照下面配置后可能会ping不通一些ip,但wget/git都是可以的,具体原因以后再分析 查找端口 首先要找到自己代理对应的HTTP端口,以QV2ray软件作为示例,我为8889 手动配置 # 配置系统proxy export http_proxy=1…...

postgresql从入门到精通 - 第35讲:中间件PgBouncer部署|PostgreSQL教程
PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。 第35讲&#…...

因为jsp for循环的一个空格引起的错误
<c:forEach items"${user.role} " var"role"> <c:forEach items"${user.role}" var"role"> 去掉空格正确显示 ,为此排查了2个小时代码逻辑...

文件中找TopK问题
目录 1.解题思路2.创建一个文件并在文件中写入数据3.为什么要建立小堆而不建立大堆?4.如何在现有的数据中建立适合的大堆?5.代码实现 1.解题思路 TopK问题即是在众多数据中找出前K大的值,则可以根据堆的性质来实现,但在使用堆之前…...

React 入门使用 (官方文档向 Part2)
文章目录 用 State 响应输入声明式地考虑 UI步骤 1:定位组件中不同的视图状态步骤 2:确定是什么触发了这些状态的改变步骤 3:通过 useState 表示内存中的 state步骤 4:删除任何不必要的 state 变量步骤 5:连接事件处理…...
vue运用之el-cascader组件
前言 el-cascader 是 Element UI 的级联选择器组件。以下是一些常见的 el-cascader 问题以及对应的案例代码。 1. 如何使用 el-cascader 创建一个级联选择器 以下是一个简单的 el-cascader 示例: <template> <el-cascader v-model="selected" :option…...

layui提示框没有渲染bug解决
bug:使用layui时或许是依赖导入又或是ideal和浏览器缓存问题导致前面明明正常的页面显示,后面出现提示框没有css样式,弹出框没有背景css 效果如下 解决后 解决方法 在你的代码中引入layer.js 我这是jsp页面 <script type"text/jav…...
MATLAB和S7-1200PLC水箱液位高度PID控制联合仿真(MODBUSTCP通信)
MATLAB和SMART 200PLC的联合仿真请查看下面文章链接 MATLAB Simulink和SMART PLC水箱液位高度PID控制(联合仿真)-CSDN博客文章浏览阅读606次。SMART PLC 向导PID的详细介绍请查看下面文章链接:S7-200 SMART PLC PID向导详细介绍(如何实现P、PD、PID控制器)-CSDN博客文章浏览阅…...

QT 项目中添加文件夹(分类文件)
为了更方便的整理项目的文件,添加文件夹把文件进行分类。 1.首先在项目文件中创建新的文件夹 2.把需要归类的文件放入新建的文件中 3.右键然后选择add..... 4.运行此程序,会报错因为文件路径改变了,需要在.pro中修改路径 注意事项 文件夹内部…...
vue3 语音播报流程
npm 安装 "speak-tts": "^2.0.8", npm install speak-tts 在vue文件中引用 import Speech from "speak-tts"; const speech ref(null);onMounted(() > {speechInit(); });//语音播报初始化 const speechInit () > {speech.value ne…...

Linux MTR(My TraceRoute)command
Internet上有许多小型网络测试工具:Ping、Traceroute、Dig、Host等。 但是,这些工具的功能都比较单一。今天会给大家分享一个包含ping和traceroute功能的工具:MTR 文章目录 什么是MTR?MTR可以提供哪些功能Linux MTR可用选项Linux MTR用法推荐…...
第十一章 python基础之api
Python基础、函数、模块、面向对象、网络和并发编程、数据库和缓存、 前端、django、Flask、tornado、api、git、爬虫、算法和数据结构、Linux、设计题、客观题、其他 第十一章 api 1. 什么是webservice? Web服务(Web Services)是一种通过网…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...