nginx location 匹配 多个规则_三道小练习助你弄懂 Nginx location 匹配
在 Nginx 中我们可以通过配置 location 指令块,来决定一个请求 url 如何处理。如果我们编写了多条 location 指令块,如何保证各个 location 不会产生冲突?如何理清 location 的匹配顺序?
带着这两个问题,我们先来做几道练习题。
原文地址,欢迎 Star 和 订阅 我的博客。
Nginx Location 小练习
问题 1、如果访问 /abcd 会匹配到哪个 config?
server
问题 2、如果访问 /abcd 会匹配到哪个 config?
server
问题 3、如果访问 /abcd 会匹配到哪个 config?
server
如果这 3 道小练习让你很费解,那么我们就接着深入研究,相信你一定会有所收获,如果只想知道答案,请直接看文章末尾。
Nginx location 配置语法
Nginx location 配置语法如下
location [ = | ~ | ~* | ^~ | 空 ] url { … }
其中 [ = | ~ | ~* | ^~ | 空 ] 表示 location 的修饰符,具体含义如下
- = 表示精准匹配(完全相等时,才会命中规则)。
- ~ 表示区分大小写的正则匹配。
- ~* 表示不区分大小写的正则匹配。
- ^~ 表示最佳匹配。
- 空,匹配以 url 开头的字符串,只能是普通字符串。
Nginx location 的匹配过程
一般来说,一个 nginx.conf 文件通常会配置多个匹配规则,如果多个匹配规则都匹配到了 url,最终会执行哪一个呢?
1、Nginx 首先根据 url 检查最长匹配前缀字符串,即会判断【=】、【^~】、【空】修饰符定义的内容。
- 如果匹配到最长匹配前缀字符串。
- 如果最长匹配前缀字符串被【=】修饰符匹配,则立即响应。
- 如果没有被【=】修饰符匹配,则执行第 2 步判断。
- 如果没有匹配到最长匹配前缀字符串,则执行第 3 步判断。
2、Nginx 继续检查最长匹配前缀字符串,即判断【^~】、【空】修饰符定义的内容。
- 如果最长匹配前缀字符串被【^~】修饰符匹配,则立即响应。
- 如果被【空】修饰符匹配,则将该匹配保存起来,并执行第 3 步判断。
3、Nginx 找到 nginx.conf 中定义的所有正则匹配(~ 和 ~*),并按顺序进行匹配。
- 如果有任何正则表达式匹配成功,则立即响应。
- 如果没有任何正则匹配成功,则响应第 2 步中存储的【空】匹配。
小练习答案
问题 1:最长匹配字符串为 abc,且有 ^~ 匹配,故结果为:config3。
问题 2:最长匹配字符串为 abc,被【空】匹配,故会开始查询正则匹配,匹配到正则 ~ /abc,故结果为:config1。
问题 3:最长匹配字符串为 abc,被【空】匹配,故会开始查询正则匹配,没有匹配到任何正则,故使用【空】匹配到的结果:config2。
参考资料
Understanding Nginx Server and Location Block Selection Algorithms
nginx location 匹配 多个规则_三道小练习助你弄懂 Nginx location 匹配相关推荐
- 中修改环境变量_系统小技巧:彻底弄懂Windows 10环境变量
每当我们进行系统清理时,清理软件总能自动找到Windows的临时文件夹之所在,然后加以清理,即便是我们重定向了TEMP目录也是如此.究其原因,是因为清理软件会根据TEMP环境变量来判断现有临时文件夹的 ...
- nginx location 匹配 多个规则_你需要知道的Nginx配置二三事
Nginx是俄罗斯人Igor Sysoev基于C语言编写的十分轻量级的HTTP服务器,它主要有以下特点: 它是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器 ...
- nginx location 匹配 多个规则_后端程序员不得不会的 Nginx 转发匹配规则
一.正则表达式匹配 ~ 为区分大小写匹配 ~* 为不区分大小写匹配 !~ 和 !~* 分别为区分大小写不匹配及不区分大小写不匹配 二.文件及目录匹配 -f 和 !-f 用来判断是否存在文件 -d 和 ...
- 弄懂 Nginx location 匹配
location 指令是 nginx 中最关键的指令之一,location 指令的功能是用来匹配不同的 URI 请求,进而对请求做不同的处理和响应,这其中较难理解的是多个 location 的匹配顺序 ...
- nginx 指向一个文件夹_弄懂nginx的语法就是这么简单
"写给自己看,说给别人听."nginx应该是我们常用到的一个软件了,它的用法和语法也很简单,本文主要介绍nginx语法以及常用命令. Nginx配置目录 当我们安装好nginx之后 ...
- 倾向得分匹配的stata命令_培训对工资是否影响显著:倾向得分匹配法(PSM)及stata实现...
第一部分 模型背景 1.研究目的 2.基本思想 第二部分 数据介绍以及语法简介 1.数据介绍 2.语法格式 第三部分 案例讲解以及stata实现 1.变量介绍以及数据描述性统计 2.倾向匹 ...
- 耳机接口规则_耳机小白必读 一分钟看懂什么是TRS接口
新酷产品第一时间免费试玩,还有众多优质达人分享独到生活经验,快来新浪众测,体验各领域最前沿.最有趣.最好玩的产品吧~!下载客户端还能获得专享福利哦! 当我们在使用数码音频产品时,往往面对的第一件事情就 ...
- matlab求传递函数在某个频率点的增益_【干货分享】轻松弄懂开关电源TL431环路补偿传递函数推导...
微信公众号:硬核电子. 开关电源常用的TL431环路接法是使用2型补偿器,本文将对这种补偿环路的原理进行说明,并推导传递函数,加深理解的同时,给实际电路设计提供理论指导.本文如有谬误之处,欢迎指正. ...
- python运行方式特点_编程必修课:一文弄懂python的运行机制
Python的维基百科说明:"是一种广泛使用的解释型,高级编程,通用型语言,具有动态类型和垃圾回收功能,能够自动管理内存使用" Python的设计哲学:优美优于丑陋,明了优于隐晦 ...
最新文章
- shell 中柏开机显示efi_中柏 ezpad 平板安装Fedora 21 (Linux)
- 将做好的py文件打包成模块,供别人安装调用
- 你的 A/B 测试数据期骗你了吗?
- mac golang grpc proto pb文件生成go文件.md
- 如何在Hibernate Search 5.5.2 / Apache Lucene 5.4.x中处理停用词?
- java char指针数组_简单总结C语言中各种类型的指针的概念
- 通过ssh方式clone项目_参与开源项目流程
- 基于jQ+CSS3页面滚动内容元素动画特效
- 男27,想转行互联网,是学习软件测试好,还是前端编程?
- fastica的matlab工具箱,FastICa matlab工具箱使用说明
- KEIL4与KEIL5护眼配色方案
- SDIO接口(4)——SDIO通信
- Directx 9在vs2008 里面的环境配置
- 《人生只有一次,去做自己喜欢的事》读书笔记
- ajax跨域获取cookie,ajax跨域获取cookie信息(示例代码)
- seo快排可视化界面封装,一键运行。
- word 文档在左侧显示文档的目录结构的方法
- ​人工智能能否跨越意识鸿沟?
- 从搬砖工到亿万富豪,这些年他经历了什么?
- Firework导航栏字体变大方法