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

Nginx的location块相关知识积累(包括常用的正则匹配表达式的介绍)

Nginx的location块相关知识积累

01-location块的优先级

注意:如果Nginx的配置中有多个location块,那么各location块的匹配优先级并不是完全按照代码的先后顺序来决定各location优先级的。而是按下面的规则来决定的:
在 Nginx 中,location块的匹配是按照以下原则的:

  1. 前缀匹配: 具有更长前缀的 location 会优先匹配。如果一个 location 的前缀是另一个 location 的前缀,那么较长前缀的 location 会被优先匹配。

  2. 正则表达式匹配: 如果存在正则表达式匹配的 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块的优先级顺序是:

  1. /:最基本的前缀匹配,匹配所有请求。因为它是最短的前缀匹配,而不是正则匹配,所以是最低优先级。

  2. ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md):正则表达式匹配,匹配特定文件路径的请求。

  3. ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$:正则表达式匹配,匹配以指定后缀结尾的静态文件请求。

  4. ~ .*\.(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 中&#xff0c…...

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"> 去掉空格正确显示 &#xff0c;为此排查了2个小时代码逻辑...

文件中找TopK问题

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

React 入门使用 (官方文档向 Part2)

文章目录 用 State 响应输入声明式地考虑 UI步骤 1&#xff1a;定位组件中不同的视图状态步骤 2&#xff1a;确定是什么触发了这些状态的改变步骤 3&#xff1a;通过 useState 表示内存中的 state步骤 4&#xff1a;删除任何不必要的 state 变量步骤 5&#xff1a;连接事件处理…...

vue运用之el-cascader组件

前言 el-cascader 是 Element UI 的级联选择器组件。以下是一些常见的 el-cascader 问题以及对应的案例代码。 1. 如何使用 el-cascader 创建一个级联选择器 以下是一个简单的 el-cascader 示例: <template> <el-cascader v-model="selected" :option…...

layui提示框没有渲染bug解决

bug&#xff1a;使用layui时或许是依赖导入又或是ideal和浏览器缓存问题导致前面明明正常的页面显示&#xff0c;后面出现提示框没有css样式&#xff0c;弹出框没有背景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 项目中添加文件夹(分类文件)

为了更方便的整理项目的文件&#xff0c;添加文件夹把文件进行分类。 1.首先在项目文件中创建新的文件夹 2.把需要归类的文件放入新建的文件中 3.右键然后选择add..... 4.运行此程序&#xff0c;会报错因为文件路径改变了&#xff0c;需要在.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等。 但是&#xff0c;这些工具的功能都比较单一。今天会给大家分享一个包含ping和traceroute功能的工具&#xff1a;MTR 文章目录 什么是MTR&#xff1f;MTR可以提供哪些功能Linux MTR可用选项Linux MTR用法推荐…...

第十一章 python基础之api

Python基础、函数、模块、面向对象、网络和并发编程、数据库和缓存、 前端、django、Flask、tornado、api、git、爬虫、算法和数据结构、Linux、设计题、客观题、其他 第十一章 api 1. 什么是webservice&#xff1f; Web服务&#xff08;Web Services&#xff09;是一种通过网…...

别再只会用‘Let‘s think step by step’了:DeepSeek-R1原生思维链的实战调优指南

别再只会用‘Let‘s think step by step’了&#xff1a;DeepSeek-R1原生思维链的实战调优指南 当你在深夜调试一个复杂的代码生成任务时&#xff0c;模型突然输出了一个完全不符合预期的结果。你盯着屏幕&#xff0c;反复检查自己的prompt——明明已经加上了经典的"Lets …...

基于BANG语言的Sigmoid算子开发与PyTorch集成实战指南

1. BANG语言与Sigmoid算子开发基础 第一次接触寒武纪BANG语言时&#xff0c;我被它类似CUDA但更简洁的语法设计惊艳到了。这种专为MLU硬件设计的异构编程语言&#xff0c;通过在C/C基础上扩展并行计算特性&#xff0c;让开发者能更高效地利用寒武纪芯片的算力资源。 BANG核心语…...

革命性WebAssembly运行时wasmer-go:让Go语言轻松运行WebAssembly模块

革命性WebAssembly运行时wasmer-go&#xff1a;让Go语言轻松运行WebAssembly模块 【免费下载链接】wasmer-go &#x1f439;&#x1f578;️ WebAssembly runtime for Go 项目地址: https://gitcode.com/gh_mirrors/wa/wasmer-go wasmer-go是一个革命性的WebAssembly运行…...

如何使用hello-uniapp性能监控工具实时掌握应用运行状态

如何使用hello-uniapp性能监控工具实时掌握应用运行状态 【免费下载链接】hello-uniapp uni-app框架演示示例 项目地址: https://gitcode.com/gh_mirrors/he/hello-uniapp hello-uniapp性能监控工具是uni-app框架演示示例中的核心功能模块&#xff0c;它提供了一套完整的…...

SecGPT-14B模型蒸馏:打造轻量级OpenClaw安全助手

SecGPT-14B模型蒸馏&#xff1a;打造轻量级OpenClaw安全助手 1. 为什么需要轻量级安全助手&#xff1f; 去年在为一个金融客户部署自动化安全监控系统时&#xff0c;我遇到了一个典型困境&#xff1a;他们的边缘设备只能提供4GB内存和2核CPU的算力&#xff0c;但SecGPT-14B这…...

XCP或者CCP标定,A2L标定文件,基于map文件自动更新A2L的地址和结构体变量的地址 源...

XCP或者CCP标定&#xff0c;A2L标定文件&#xff0c;基于map文件自动更新A2L的地址和结构体变量的地址 源码基于C&#xff03;需要开发&#xff0c;编译器为VS2022搞汽车电子的兄弟应该都遇到过这样的问题——辛辛苦苦标定的A2L文件&#xff0c;程序稍微改两行代码&#xff0c;…...

头皮上也长痘痘,一梳头就碰到好痛怎么办?

很多人都有过头皮长痘的困扰&#xff0c;一梳头碰到就痛&#xff0c;别提多难受了。其实&#xff0c;头皮长痘和我们的健康息息相关&#xff0c;下面就来详细说说其中的原因和解决办法。痘痘成因大揭秘清洁不到位头皮和脸部皮肤一样&#xff0c;会分泌油脂。如果平时洗头不勤&a…...

AI 模型调度平台的系统架构

AI模型调度平台的系统架构&#xff1a;智能时代的核心引擎 在人工智能技术飞速发展的今天&#xff0c;AI模型调度平台成为企业实现智能化转型的关键基础设施。它通过高效管理、调度和优化AI模型资源&#xff0c;帮助用户快速部署和运行复杂的AI任务。本文将深入解析AI模型调度…...

ExtendedChars:Adafruit GFX的UTF-8扩展字符支持方案

1. 项目概述 ExtendedChars 是一个专为 Adafruit GFX 图形库设计的轻量级扩展组件&#xff0c;其核心工程目标是突破原生 GFX 库对 ASCII 字符集&#xff08;0x00–0x7F&#xff09;的硬性限制&#xff0c;实现对 UTF-8 编码多字节字符的可靠解析与渲染。该库并非重写显示驱动…...

个人------完成主页,个人花园,相册页面的前端代码编写

最近一段时间&#xff0c;我专注于个人花园博客系统的前端开发工作&#xff0c;从基础页面搭建到交互逻辑实现&#xff0c;逐步完成了多个核心模块的开发&#xff0c;虽然目前尚未连接后端&#xff0c;但前端页面的视觉呈现和基础交互已全部落地。本次开发主要围绕个人主页、相…...