Nginx-基础-基础配置-Location

Location

参数匹配模式
参数匹配方式匹配模式说明注意事项
=精准匹配普通字符串匹配用于标准uri前,要求请求字符串与uri精准匹配,成功则立即处理,nginx停止搜索其他匹配。
~正则匹配正则表达式匹配用于正则uri,表示uri包含正则表达式,并且区分大小写。如果uri包含正则表达式,就必须要使用“~”或者“~*”标识。
~*正则表达式匹配用于正则uri,表示uri包含正则表达式,并且不区分大小写。
^~带参前缀匹配 (短路匹配)普通字符串匹配用于标准uri前,并要求一旦匹配到就会立即处理,不再去匹配其他的正则URI,一般用来匹配目录。
普通前缀匹配普通字符串匹配location后没有参数直接跟着标准uri,表示前缀匹配,代表跟请求中的uri从头开始匹配。
参数匹配模式优先级

location 的匹配并不完全按照其在配置文件中出现的顺序来匹配,请求URI 会按如下规则进行匹配,优先级从高到低依次为(序号越小优先级越高):

1. location =    # 精准匹配,精准匹配成功则会立即停止其他类型匹配;
2. location ^~   # 带参前缀匹配。如果是带有 ^~ 的前缀匹配,匹配成功则立即停止其他类型匹配;如果是普通前缀匹配(不带参数 ^~ )成功则会暂存,继续查找正则匹配;
3. location ~    # 正则匹配(区分大小写)。当同时有多个正则匹配时,按其在配置文件中出现的先后顺序优先匹配,命中则立即停止其他类型匹配;
4. location ~*   # 正则匹配(不区分大小写)
5. location /a   # 普通前缀匹配,优先级低于带参数前缀匹配。所有正则匹配均未成功时,返回步骤 2 中暂存的普通前缀匹配(不带参数 ^~ )结果。普通字符串匹配则无视顺序,只会选择最精确的匹配。
6. location /    # 任何没有匹配成功的,都会匹配这里处理
表达式说明
^匹配输入字符串的起始位置(以什么开头)。
$匹配输入字符串的结束位置(以什么结尾)。
*匹配前面的字符零次或多次。 如"01*“能够匹配到"0”、“01”、“011”、“0111…”。
+匹配前面的字符一次或多次。 如"01*“能够匹配到"01”、“011”、“0111…”。
?匹配前面字符零次或一次。 如01?只能能够匹配到"0"、“01”。
.匹配除”\n“之外的任意一个字符,若要匹配包括”\n“在内的任意字符则使用”[.\n]“之类的表达式.*
|转义符
\d匹配出数字效果于[0-9]一致
\s空白符
\w任意单词字符包括下划线
{n}匹配前面表字符n次
{n,}匹配前面字符不少于n次
{n,m}匹配前面字符n到m次
[]定义匹配的字符范围
[c]匹配单个字符c
[a-z]匹配a-z小写字母任意一个
[a-zA-Z0-9]匹配范围大小写字母及数字
()看成整体匹配
或运算符

直接上案例

开始之前先介绍一个配置:
merge_slashes on | off; 默认是开启的也就是会合并// 为/ 提高匹配成功的概率,也就是容错

通用匹配

一般是兜底策略(待完善)

#如果兜底策略是 静态文件 这样是不行了 比如请求一个路径 /jj 会404 (why?)
location / {root   html;index  index.html index.htm;
}
# 如果是这样配置 则所有没有匹配上的路径最终都会返回402
location / {return 402;
}

普通前缀匹配和通用匹配

1 在普通匹配里一定要注意这两个路径是不同的,如果是下面这样的配置:
http://127.0.0.1:8887/doc/aaa/ 可以匹配成功
http://127.0.0.1:8887/doc/aaa 会404
http://127.0.0.1:8887/Doc/aaa 也会匹配成功

location /doc/aaa/ {return 401;
}

2 普通匹配遵循最长策略

location /document {return 401;}location /doc {return 402;}

访问document docm docume 都会返回401

带参匹配
server {listen 80;server_name localhost;location ^~ /doc {return 401;}location ~* ^/document$ {return 402;}
}

如果没有其它的带参匹配,则带参匹配匹配成功后立即返回。如果还有其他带参匹配,则也是遵循最长匹配原则。

精准匹配
 server {listen       80;server_name  localhost;location = / {return 400;}location = /document {return 401;}}

同理也是如果只有一个精准匹配则会立即返回,否则也是遵循最长原则。

优先级
location ~ /Test1/$ {add_header Content-Type "text/plain";return 200 'first regular expressions match!';
}
location ~* /Test1/(\w+)$ {add_header Content-Type "text/plain";return 200 'longest regular expressions match!';
}
location ^~ /Test1/ {add_header Content-Type "text/plain";return 200 'stop regular expressions match!';
}
location /Test1/Test2 {add_header Content-Type "text/plain";return 200 'longest prefix string match!';
}
location /Test1 {add_header Content-Type "text/plain";return 200 'prefix string match!';
}
location = /Test1 {add_header Content-Type "text/plain";return 200 'exact match!';
}

测试1:
访问: /Test1 返回值 ‘exact match!’ 因为精确匹配的优先级最高,匹配到了以后不会再向后匹配。
测试2:
访问: /Test1/ 这个时候精准匹配不上了所以按照优先级应该是去找正则匹配,由于我们配置了带参匹配^~ 这个匹配成功也会立即返回。结果为:‘stop regular expressions match!’
测试3:
访问:/Test1/Test2 ~* /Test1/(\w+)$ 由于我们配置正则表达式优先级更高,所以返回结果:‘longest regular expressions match!’
测试4:
访问:/Test1/Test2/ ~* /Test1/(\w+)$是严格以字母或数字结尾 所以正则匹配不上,走最长前缀匹配 ‘longest prefix string match!’ (\w:用于匹配字母,数字或下划线字符)
测试5:
访问:/test1/Test2 这个时候不区分大小写的正则表达式都匹配不上,因为要以字母或数字结尾,所以走普通匹配 返回 ‘longest prefix string match!’

在这里插入图片描述

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

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

相关文章

基于SSM的理发店会员管理系统的设计和实现(有报告)。Javaee项目。ssm项目。

演示视频: 基于SSM的理发店会员管理系统的设计和实现(有报告)。Javaee项目。ssm项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&#xff0…

Docker安装达梦数据库

1.确保已安装Docker 可参考:Linux安装Docker-CSDN博客 2.上传dm镜像并导入安装包 可以从:产品下载 | 达梦数据库下载dm镜像,如下图: docker load -i dm8_20230808.tar 3.导入后查看镜像 docker images 4.启动容器 docker run …

图的概念、性质和存储与简单遍历

前置知识:树的基本概念及性质 为了保证学习效果,请保证已经掌握前置知识之后,再来学习本章节!如果在阅读中遇到困难,也可以回到前面章节查阅。 学习目标 掌握图的基本概念掌握图的一些性质 图的概念 基本概念 图 (…

Pytorch如何计算网络参数

方法一. 利用pytorch自身 PyTorch是一个流行的深度学习框架,它允许研究人员和开发者快速构建和训练神经网络。计算一个PyTorch网络的参数量通常涉及两个步骤:确定网络中每个层的参数数量,并将它们加起来得到总数。 以下是在PyTorch中计算网…

如何在 CloudFlare 里屏蔽/拦截某个 IP 或者 IP 地址段

最近除了接的 CloudFlare 代配置订单基本很少折腾自己的 CloudFlare 配置了,今天给大家简单的讲解一下如何在 CloudFlare 里屏蔽/拦截 IP 地址和 IP 地址段,虽然明月一直都很反感针对 IP 的屏蔽拦截,但不得不说有时候还是很有必要的。并且,既然可以拦截屏蔽 IP 自然也可以但…

鸿蒙内核源码分析(VFS篇) | 文件系统和谐共处的基础

基本概念 | 官方定义 VFS(Virtual File System)是文件系统的虚拟层,它不是一个实际的文件系统,而是一个异构文件系统之上的软件粘合层,为用户提供统一的类Unix文件操作接口。由于不同类型的文件系统接口不统一&#x…

Flink HA模式下JobManager切换时发送告警

资源&版本信息 Flink版本1.14.6 运行平台:K8s HA使用ZK(使用K8s的ETC应该是一个道理) 详解Flink HA原理 Flink启动时会创建HighAvailabilityServices提供HA和相关基础服务,其中包括leaderRetrievalService和LeaderElecti…

搜索引擎的设计与实现(二)

目录 3 搜索引擎的基本原理 3.1搜索引擎的基本组成及其功能 l.搜索器 (Crawler) 2.索引器(Indexer) 3.检索器(Searcher) 4.用户接口(UserInterface) 3.2搜索引擎的详细工作流程 4 系统分析与设计 4.1系统分析 4.2系统概要设计 4.2系统实现目标 前面内容请移步 搜索引…

宁夏银川市起名专家的老师颜廷利:死神(死亡)并不可怕,可怕的是...

在中国优秀传统文化之中,汉语‘巳’字与‘四’同音,在阿拉伯数字里面,通常用‘4’来表示; 湖南长沙、四川成都、重庆、宁夏银川最靠谱最厉害的起名大师的老师颜廷利教授指出,作为汉语‘九’字,倘若是换一个…

[ACTF新生赛2020]SoulLike

没见过的错误: ida /ctg目录下的hexrays.cfg文件中的MAX_FUNCSIZE64 改为 MAX_FUNCSIZE1024 然后就是一堆数据 反正就是12个字符 from pwn import * flag"actf{" k0 for n in range(12):for i in range(33,127):pprocess("./SoulLike")_flag…

94.二叉树的中序遍历

刷算法题: 第一遍:1.看5分钟,没思路看题解 2.通过题解改进自己的解法,并且要写每行的注释以及自己的思路。 3.思考自己做到了题解的哪一步,下次怎么才能做对(总结方法) 4.整理到自己的自媒体平台。 5.再刷重复的类…

Python爬虫入门:网络世界的宝藏猎人

今天阿佑将带你踏上Python的肩膀,成为一名网络世界的宝藏猎人! 文章目录 1. 引言1.1 简述Python在爬虫领域的地位1.2 阐明学习网络基础对爬虫的重要性 2. 背景介绍2.1 Python语言的流行与适用场景2.2 网络通信基础概念及其在数据抓取中的角色 3. Python基…

ssm+vue的公务用车管理智慧云服务监管平台查询统计(有报告)。Javaee项目,ssm vue前后端分离项目

演示视频: ssmvue的公务用车管理智慧云服务监管平台查询统计(有报告)。Javaee项目,ssm vue前后端分离项目 项目介绍: 采用M(model)V(view)C(controller&…

求阶乘n!末尾0的个数溢出了怎么办

小林最近遇到一个问题:“对于任意给定的一个正整数n,统计其阶乘n!的末尾中0的个数”,这个问题究竟该如何解决? 先用n5来解决这个问题。n的阶乘即n!5!5*4*3*2*1120,显然应该为2个数相乘等于10才能得到一个结…

量化交易包含些什么?

我们讲过许多关于量化交易的内容,但是量化交易具体可以做些什么?很多朋友都还不清楚,我们详细来探讨下! 第一:什么是量化交易? 量化交易是一种利用先进的数学模型和计算机技术,从大量的历史数…

制造业精益生产KPI和智慧供应链管理方案和实践案例分享

随着工业4.0的推进和国家对制造业高质量发展的重视,工业数据已跃升为生产经营活动中不可或缺的核心要素,同时,工业数据也是形成新质生产力的优质生产要素,助力企业实现高效精益生产。 工业数据在制造业中的作用不可忽视&#xff…

Linux: 默认进程介绍

进程名称介绍systemdSystemd 可以管理所有系统资源。不同的资源统称为 Unit(单位)。 Unit 一共分成12种。 systemctl list-units命令可以查看当前系统的所有 Unitkthreaddkthreadd进程由idle通过kernel_thread创建,并始终运行在内核空间, 负责…

Hbase基础操作Demo(Java版)

一、前置条件 HBase服务:【快捷部署】023_HBase(2.3.6)开发环境:Java(1.8)、Maven(3)、IDE(Idea 或 Eclipse) 二、相关代码 代码结构如上图中①和② pom.x…

vue项目中使用websocke即时通讯实现系统公告实时获取并提醒

一、使用场景 发布者设置需要发布的公告内容、公告接收用户和发布时间,到达发布时间时及时通知提醒已登录系统用户,使用websocke来实现前端与服务器保持长连接,以便实时过去公告信息。 WebSocket是一种在单个TCP连接上进行全双工通信的协议…

draw.io 网页版二次开发(1):源码下载和环境搭建

目录 一 说明 二 源码地址以及下载 三 开发环境搭建 1. 前端工程地址 2. 配置开发环境 (1)安装 node.js (2)安装 serve 服务器 3. 运行 四 最后 一 说明 应公司项目要求,需要对draw.io进行二次开发&…