Nginx系列-3 servername优先级和location优先级和常用正则表达式
1.正则表达式和分组
由于Nginx配置文件中经常出现正则表达式,因此本章节专门对常见的正则表达式进行简单介绍。
[1] 开始与结束
^表示匹配输入字符串的开始
$表示匹配输入字符串的结束
[2] 匹配次数
?表示匹配0次或者1次
+表示匹配1次或多次
*表示匹配0从或多次
{n}匹配n次,{n,}至少匹配n次,{n,m} 匹配n至m次
[3] 匹配字符
\符号用于转义.匹配除\n之外的任意字符[xyz]表示匹配xyz中任意一个字符[a-z]表示匹配任意小写字母;[^a-z]取反,表示匹配除小写字母之外的任意字符;
[A-Z]表示匹配任意大写字母;[a-zA-Z]匹配任意字母;[0-9]表示匹配任意数字, 等价于\d; [^0-9]表示匹配任意数字, 等价于\D
\s匹配任何空白字符;\S匹配任何非空白字符;x|y 表示匹配x或y
[4] 分组
rewrite ^/group/(.*)$ /index.php?param=$1;
rewrite表示地址重写,将匹配正则表达式^/group/(.*)$
的url地址重写为/index.php?param=$1
.
如 url为/group/abc123
将修改为/index.php?param=abc123
.
基于前述正则表达式的介绍,对^/group/(.*)$
进行解析:
^/group/
表示匹配以/group/开头的url; (.*)是一个捕获组,表示捕获任意字符;整体看来,表示匹配任意以/group/开头的url,且将/group/后面的部分捕获,后续可以使用$1对其进行提取。
再给出一个案例:
rewrite ^/group/(\d{4})/(\d{2})/?$ /index.php?year=$1&month=$2;
当url地址为/group/2024/03/
或者/group/2024/03
时,地址重写为/index.php?year=2024&month=03
.
对这段表达式进行解析:
^/group/表示匹配以/group/开头的url; (\d{4})和(\d{2})是捕获组,分别捕获4位数字和2位数字;/? 表示/可以匹配0次或者1次,即url是否以/结尾都可以; 整体来看,正则表达式匹配以/group/开头,紧跟4位数字,然后是分隔符,然后紧跟2位数字,可以以/结尾或者不带/. 并且将4位数字\d{4}提取为$1, 将2位数字\d{2}提取为$2.
2.servername优先级
2.1 servername介绍
servername配置在server块中。当客户端向Nginx服务器发送请求时,Nginx会根据请求的Host头字段与server_name进行匹配,以确定将请求转发到哪个server块进行处理。
servername可以使用ip或者域名方式进行,一般配置为域名,如:
server_name localhost;server_name 127.0.0.1;
也可以配置多个域名:
server_name localhost transgpt env124;
2.2 servername配置方式
servername配置方式有以下4种:
[1] 完全匹配
server_name env124;
[2] 左通配符匹配
以*开头的匹配方式
server_name *124;
[3] 右通配符匹配
以*结尾的匹配方式
server_name env*;
[4] 正则表达式匹配
server_name ~^env\d{3}$;
优先级顺序为:完全匹配>左通配符匹配>右通配符匹配>正则表达式匹配.
3.3 默认匹配
当Nginx收到来自客户端的请求时,会根据端口缩小候选的server块范围,然后根据server_name进行匹配:
[1] 当存在多个匹配server块时,会根据1.2中提到的优先级进行匹配,选择优先级最高的第一个server块处理;
[2] 当仅存在一个匹配的server块时,由该server块处理;
[3] 当没有匹配的server块时,如果有默认块,使用默认块处理;如果没有默认块,则使用候选中的第一个server块。
3.url类型和优先级
location块的语法格式为:
location [ = | ^~ | ~ | ~* | 空 | / ] uri { #匹配后的处理逻辑,proxy_pass,root/alias/index等;
}
location关键字和url之间有6种类型的匹配规则, 按优先级排序依次为:
[1] = 完全匹配
请求路径必须与location的url完全匹配(大小写一致、斜线一致)
server {listen 8888;server_name localhost;location = /test.html {return 200 "--Your are enter [http://localhost:8888/test.html]";}
}
配置为/test.html时,只能以/test.html去请求,如下所示:
[root@host44 conf]# curl http://localhost:8888/test.html
--Your are enter [http://localhost:8888/test.html]--
其他(如下所示场景)则不能匹配:
http://localhost:8888/test.html/
http://localhost:8888/test.htmla
http://localhost:8888/Test.html
http://localhost:8888/
[2] ^~ 前缀匹配
说明:为理解方便,以下介绍匹配规则时,省去域名和端口。
location ~ /test {
}
匹配以/test开头的所有url, 如下所示:
/test
/test/
/test/abc
/testabc
注意:前缀匹配区分大小写。
当有多个前缀匹配满足时,有一个最大字符串匹配规则,即匹配字符串长度大的优先。
[3] ~ 正则表达式匹配, 区分大小写
正则表达式语法可以参考"正则表达式"章节内容。
location ~ ^/query/.*$ {return 200 "query success";
}
此时,正则表达式^/query/.*$
表示所有以/query/开头的url.
[4] ~ 正则表达式匹配, 不区分大小写*
与[3]相似,区别在于不区分大小写。
#只能匹配/query/开头的url
location ~ ^/query/.*$ {return 200 "query success";
}#可以匹配/QUerY/开头的url
location ~* ^/query/.*$ {return 200 "query success";
}
[5] 空
与^~类似属于前缀匹配,但优先级低于正则表达式,最大字符串匹配规则仍然适应。
location ~ /test {
}
匹配以/test开头的所有url, 如下所示:
/test
/test/
/test/abc
/testabc
[6] / 通用匹配
匹配所有请求,一般作为默认访问-访问网站首页,放在配置的最后。
location / {root /usr/local/nginx/conf/html/;index index.html;
}
除此之外,还有一种定义方式,使用@开头命名的location。该类型的location块不会参与url匹配, 仅用于nginx内部使用, 如try_files、errorpage, 案例如下所示:
server {server_name localhost;listen 8001;location /query {try_files index.htm index.html @custom_404;}location /set {error_page 404 @index_error;}location @custom_404{return 200 "Custom 404 page not found";}
}
测试结果如下所示:
[root@124 conf]# curl http://localhost:8001/queryxxx
Custom 404 page not found[root@124 conf]# curl http://localhost:8001/setxxx
Custom 404 page not found
相关文章:
Nginx系列-3 servername优先级和location优先级和常用正则表达式
1.正则表达式和分组 由于Nginx配置文件中经常出现正则表达式,因此本章节专门对常见的正则表达式进行简单介绍。 [1] 开始与结束 ^表示匹配输入字符串的开始 $表示匹配输入字符串的结束[2] 匹配次数 ?表示匹配0次或者1次 表示匹配1次或多次 *表示匹配0从或多次…...

python—爬虫爬取电影页面实例
下面是一个简单的爬虫实例,使用Python的requests库来发送HTTP请求,并使用lxml库来解析HTML页面内容。这个爬虫的目标是抓取一个电影网站,并提取每部电影的主义部分。 首先,确保你已经安装了requests和lxml库。如果没有安装&#x…...
实现图片拖拽和缩小放大功能。
1. 前言 不知道各位前端小伙伴蓝湖使用的多不多,反正我是经常在用,ui将原型图设计好后上传至蓝湖,前端开发人员就可以开始静态页面的的编写了。对于页面细节看的不是很清楚可以使用滚轮缩放后再拖拽查看,还是很方便的。于是就花了…...

昇思25天学习打卡营第18天|munger85
DCGAN生成漫画头像 首先肯定是下载训练数据,而这些训练数据就是一些卡通头像。后来我们会看到这个具体的头像 就像其他的数据集目录一样,它是由一些目录和这个目录下面的文件组成的数据集。 有相当多的图片。所以可以训练出来比较好的效果。 图片的处理…...

nginx配置文件说明
Nginx的配置文件说明 Nginx配置文件的主要配置块可以分为三个部分:全局配置块(events和http块),events块和http块。这三个部分共同定义了Nginx服务器的整体行为和处理HTTP请求的方式。 全局配置块: 包含了影响Nginx服…...

用不同的url头利用Python访问一个网站,把返回的东西保存为txt文件
这个需要调用requests模块(相当于c的头文件) import requests 还需要一个User-Agent头(这个意思就是告诉python用的什么系统和浏览器) Google Chrome(Windows): Mozilla/5.0 (Windows NT 10.0; Win64; x64…...

一文掌握Prometheus实现页面登录认证并集成grafana
一、接入方式 以保护Web站点的访问控制,如HTTP 服务器配置中实现安全的加密通信和身份验证,保护 Web 应用程序和用户数据的安全性。 1.1 加密密码 通过httpd-tools工具包来进行Web站点加密 yum install -y httpd-tools方式一:通过htpasswd生…...
欢迎来到 Mint Expedition:Web3 和 NFT 的新时代开始
7 月 15 日,Mint Expedition 正式开启,作为 Mint 生态系统的旗舰项目,将彻底变革 Web3 和 NFT 去中心化应用! Mint Expedition 是 Mint 的最新航程,延续了 Mint Forest 的成功。Mint Forest 吸引了超过 41.4 万独立用…...

针对环境构图的全局一致性扫描点云数据对齐(Graph SLAM)
本算法是一个经典的,针对SLAM(simultaneous localization and mapping 即时定位与地图构建)问题而提出的算法。该算法的提出者是Feng Lu和Evangelos Milios,他们在本算法中开创了通过全局优化方程组以减少约束引入的误差来进一步优…...
Matlab学习笔记01 - 基本数据类型
Matlab学习笔记01 - 基本数据类型 1、数据类型转换2、矩阵2.1 访问单个矩阵元素2.2 访问多个矩阵元素2.3 矩阵转置 3、字符与字符串4、数值与字符串5、元胞数组 1、数据类型转换 十进制转十六进制字符串‘FF’ >> hex2dec(3ff)ans 1023十进制转十六进制字符串 >>…...

基于重要抽样的主动学习不平衡分类方法ALIS
这篇论文讨论了数据分布不平衡对分类器性能造成的影响,并提出了一种新的有效解决方案 - 主动学习框架ALIS。 1、数据分布不平衡会影响分类器的学习性能。现有的方法主要集中在过采样少数类或欠采样多数类,但往往只采用单一的采样技术,无法有效解决严重的类别不平衡问题。 2、论…...

Python爬虫(基本流程)
1. 确定目标和范围 明确需求:确定你需要从哪些网站抓取哪些数据。合法性:检查目标网站的robots.txt文件,了解哪些内容可以被抓取。数据范围:确定爬取数据的起始和结束点,比如时间范围、页面数量等。 2. 选择合适的工…...

primeflex教学笔记20240720, FastAPI+Vue3+PrimeVue前后端分离开发
练习 先实现基本的页面结构: 代码如下: <template><div class"flex p-3 bg-gray-100 gap-3"><div class"w-20rem h-12rem bg-indigo-200 flex justify-content-center align-items-center text-white text-5xl">…...

移动设备安全革命:应对威胁与解决方案
移动设备已成为我们日常工作和家庭生活中不可或缺的工具,然而,对于它们安全性的关注和投资仍然远远不够。本文深入分析了移动设备安全的发展轨迹、目前面临的威胁态势,以及业界对于这些安全漏洞响应迟缓的深层原因。文中还探讨了人们在心理层…...

【C语言】 链表实现学生管理系统(堆区开辟空间)
总体思路都能写出来,问题是感觉稍微比之前的麻烦一些,在刚开始创建结构体的时候,并没有去按照链表的思路去写,导致写成了顺序表,后面就一直纠结空间怎么开辟。 链表是由一个头节点和其它申请出来的小节点连起来的&…...

STM32实战篇:按键(外部输入信号)触发中断
功能要求 将两个按键分别与引脚PA0、PA1相连接,通过按键按下,能够触发中断响应程序(不需明确功能)。 代码流程如下: 实现代码 #include "stm32f10x.h" // Device headerint main() {//开…...

Android SurfaceView 组件介绍,挖洞原理详解
文章目录 组件介绍基本概念关键特性使用场景 SurfaceHolder介绍主要功能使用示例 SurfaceView 挖洞原理工作机制 使用SurfaceView展示图片示例创建一个自定义的 SurfaceView类在 Activity 中使用 ImageSurfaceView注意事项效果展示 组件介绍 在 Android 开发中,Sur…...
day2加餐 Go 接口型函数的使用场景
文章目录 问题价值使用场景其他语言类似特性 问题 在 动手写分布式缓存 - GeeCache day2 单机并发缓存 这篇文章中,有一个接口型函数的实现: // A Getter loads data for a key. type Getter interface {Get(key string) ([]byte, error) }// A Getter…...

摄像头 RN6752v1 视频采集卡
摄像头 AHD倒车摄像头比较好,AHD英文全名Analog High Definition,即模拟高清,拥有比较好的分辨率与画面质感。 RN6752v1 GQW AKKY2 usb 采集卡 FHD(1080p)、HD(720p)和D1(480i&am…...

记录vivado自带IP iBert眼图近端回环
记录利用vivado自带IP核工具测试信号质量 ibert是测试眼图的工具,在使用的时候并不用改太多的内容,只需要注意参考时钟及所需要的引脚即可。由于条件的限制,并没有使用光纤和电缆进行连接进行外部回环,仅使用内部回环做测试&…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...

以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...

算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能
指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...
Spring Boot + MyBatis 集成支付宝支付流程
Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例(电脑网站支付) 1. 添加依赖 <!…...

数据结构第5章:树和二叉树完全指南(自整理详细图文笔记)
名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 原创笔记:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 上一篇:《数据结构第4章 数组和广义表》…...