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

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前后端分离开发

练习 先实现基本的页面结构&#xff1a; 代码如下&#xff1a; <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">…...

移动设备安全革命:应对威胁与解决方案

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

【C语言】 链表实现学生管理系统(堆区开辟空间)

总体思路都能写出来&#xff0c;问题是感觉稍微比之前的麻烦一些&#xff0c;在刚开始创建结构体的时候&#xff0c;并没有去按照链表的思路去写&#xff0c;导致写成了顺序表&#xff0c;后面就一直纠结空间怎么开辟。 链表是由一个头节点和其它申请出来的小节点连起来的&…...

STM32实战篇:按键(外部输入信号)触发中断

功能要求 将两个按键分别与引脚PA0、PA1相连接&#xff0c;通过按键按下&#xff0c;能够触发中断响应程序&#xff08;不需明确功能&#xff09;。 代码流程如下&#xff1a; 实现代码 #include "stm32f10x.h" // Device headerint main() {//开…...

Android SurfaceView 组件介绍,挖洞原理详解

文章目录 组件介绍基本概念关键特性使用场景 SurfaceHolder介绍主要功能使用示例 SurfaceView 挖洞原理工作机制 使用SurfaceView展示图片示例创建一个自定义的 SurfaceView类在 Activity 中使用 ImageSurfaceView注意事项效果展示 组件介绍 在 Android 开发中&#xff0c;Sur…...

day2加餐 Go 接口型函数的使用场景

文章目录 问题价值使用场景其他语言类似特性 问题 在 动手写分布式缓存 - GeeCache day2 单机并发缓存 这篇文章中&#xff0c;有一个接口型函数的实现&#xff1a; // A Getter loads data for a key. type Getter interface {Get(key string) ([]byte, error) }// A Getter…...

摄像头 RN6752v1 视频采集卡

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

记录vivado自带IP iBert眼图近端回环

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

js | Core

http://dmitrysoshnikov.com/ecmascript/javascript-the-core/ Object 是什么&#xff1f; 属性[[prototype]]对象。 例如&#xff0c;下面的&#xff0c;son是对象&#xff0c;foo不是对象。打印出来的son&#xff0c;能看到有一个prototype 对象。 prototype vs _proto_ v…...

Log4J reminder

Java JNDI and Log injection https://docs.oracle.com/javase/jndi/tutorial/ See also https://telegra.ph/Log4J-Vulnerability-Explained-07-21...

Unity XR Interaction Toolkit(VR、AR交互工具包)记录安装到开发的流程,以及遇到的常见问题(一)!

提示&#xff1a;文章有错误的地方&#xff0c;还望诸位大神不吝指教&#xff01; 文章目录 前言一、XR Interaction Toolkit是什么&#xff1f;二、跨平台交互三、 AR 功能四、XR Interaction Toolkit的特点五、XR Interaction Toolkit 示例总结 前言 随着VR行业的发展&#…...

MongoDB文档整理

过往mongodb文档&#xff1a; https://blog.csdn.net/qq_46921028/article/details/123361633https://blog.csdn.net/qq_46921028/article/details/131136935https://blog.csdn.net/qq_46921028/article/details/139247847 1. MongoDB前瞻 1、MongoDB概述&#xff1a; MongoDB是…...

【AI学习】关于Scaling Law的相关学习

一、苦涩的教训 首先&#xff0c;学习一段重要话语&#xff1a; The biggest lesson that can be read from 70 years of AI research is that general methods that leverage computation are ultimately the most effective, and by a large margin. 从70年的人工智能研究中…...

学习小记-Kafka相较于其他MQ有啥优势?

Kafka 相比于 RocketMQ 有以下几个优势&#xff1a; 1. 高吞吐量和低延迟&#xff1a; Kafka 以其出色的 I/O 性能和分布式架构设计&#xff0c;能够实现极高的吞吐量&#xff0c;每秒数百万的消息处理能力&#xff0c;适合大规模数据流处理。同时&#xff0c;Kafka 设计为…...

技能 | postman接口测试工具安装及使用

哈喽小伙伴们大家好!今天来给大家分享一款轻量级,高效好用的接口测试工具-postman. Postman是一个流行的API开发工具&#xff0c;主要用于测试、开发和文档化API。以下是关于Postman的介绍及其主要使用场景&#xff1a; Postman介绍&#xff1a; 1. 功能丰富的API客户端&#…...

移动UI:任务中心的作用,该如何设计更合理?

任务中心是移动应用中用于展示和管理用户待办任务、提醒事项、用户福利、打卡签到等内容的功能模块。合理设计任务中心可以提升用户体验和工作效率。 以下是一些设计任务中心的合理建议&#xff1a; 1. 易于查看和管理&#xff1a; 任务中心的设计应该使用户能够快速、直观地…...

pytorch学习(十)优化函数

优化函数主要有&#xff0c;SGD, Adam&#xff0c;RMSProp这三种&#xff0c;并且有lr学习率&#xff0c;momentum动量&#xff0c;betas等参数需要设置。 通过这篇文章&#xff0c;可以学到pytorch中的优化函数的使用。 1.代码 代码参考《python深度学习-基于pytorch》&…...

Ubuntu22.04:安装Samba

1.安装Samba服务 $ sudo apt install samba samba-common 2.创建共享目录 $ mkdir /home/xxx/samba $ chmod 777 /home/xxx/samba 3.将用户加入到Samba服务中 $ sudo smbpasswd -a xxx 设置用户xxx访问Samba的密码 4.配置Samba服务 $ sudo vi /etc/samba/smb.conf 在最后加入 …...

专业做破碎机的网站/日本免费服务器ip地址

配置tokenstore.js&#xff0c;state中的数据一刷新就会消失&#xff0c;所以需要在localStorage中重新获取state: {//从localStorage中获取&#xff0c;没有则为空字符串token:localStorage.getItem(token)||},mutations: {//设置state.token对象setUtoken(state,token){state…...

wordpress 访客插件/网页设计代码

上篇博客试图采用RecyclerView这个组件来实现一个滑动效果&#xff0c;结果发现大部分代码都是通过java代码来控制填充&#xff0c;设计时不仅操作麻烦&#xff08;最主要看不懂&#xff09;&#xff0c;而且不能像xml文件一样实时预览效果。 碰巧发现了这篇博客 Android ListV…...

如何做正版小说网站/武汉seo推广优化

0 引言 《信息安全技术 信息系统安全等级保护基本要求》&#xff08;GB/T 22239-2008&#xff09;在我国推行信息安全等级保护制度的过程中起到了非常重要的作用, 被广泛用于各行业或领域, 指导用户开展信息系统安全等级保护的建设整改、等级测评等工作[1]。随着信息技术的发展…...

做网站顺序/关键词分析工具

接着上节继续学习&#xff0c;在本章中&#xff0c;你将从网上下载数据&#xff0c;并对这些数据进行可视化。网上的数据多得难以置信&#xff0c;且大多未经过仔细检查。如果能够对这些数据进行分析&#xff0c;你就能发现别人没有发现的规律和关联。我们将访问并可视化以两种…...

阿里云虚拟主机怎么建立网站/免费个人网站模板

知己知彼才能百战不殆。要想回答好问题就要先思考面试官的提问的动机。 首先我们分析一下面试官为什么要问这个问题&#xff0c;通过这个问题的答案他希望能获取到什么信息&#xff0c;然后我们把他希望获取到信息表达出来就可以了。面试官通过这个问题主要想了解三个方面&…...

一个空间两个wordpress/月嫂免费政府培训中心

栈&#xff1a;​ 只有一个端口进入&#xff0c;元素先进后出FILO。 ​ 而栈内存正是使用了这种结构管理内存&#xff0c;所以才叫栈内存。 基于这个&#xff0c;我们通过链表的形式来实现栈的一系列操作&#xff0c;如入栈、出栈、获取栈顶元素等。 //节点结构体定义 typed…...