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

NGINX 之 location 匹配优先级

 章节

1 NGINX 的源码安装

2 NGINX 核心配置详解

3 NGINX 之 location 匹配优先级

4 NGINX 基础参数与功能 

目录

1 location 基础语法

1.1 location 语法说明表

1.2 URI部分简单介绍

2 location 匹配优先级

2.1 URI匹配的规则与顺序

2.2 精确匹配(location = /1.txt)

2.3 区分大小写(location ~ \.(txt|html|php|png)$)

2.4 不区分大小写(location ~* \.(txt|html|php|png)$)

3 URI优先级匹配案例

3.1 几种方式测试文件匹配优先级

3.1.1 测试location 的访问(同一个文件名不相同的目录)

3.1.2 测试结果

3.1.3 location /documents 存在的特殊性

3.1.4 总结文件匹配测试

3.2 几种方式测试目录匹配优先级

3.2.1 同一文件名不同目录 且 匹配规则是目录

3.2.2 创建目录与index.html 文件

3.3.3 实现效果

3.3.4 总结目录匹配


1 location 基础语法

location 指令的作用是根据用户请求的URI来执行不同的应用。 location使用的语法为

location [=|~|~*|^~] uri {....
}

1.1 location 语法说明表

location[=|~|~*|^~]uri{....}
指令匹配标识匹配的网站地址匹配URI后要执行的配置段

1.2 URI部分简单介绍

~ 与~* 的区别 ~ 匹配内容区分大小写 ~* 匹配内容不区分的小写

!~ 取反

^~ 但多个匹配同时存在,优先匹配 ^~匹配的内容;不做正则表达式的检查 (优先处理)

location 指令的作用是根据用户请求的URI来执行不同的应用。

不同uri及特殊字符组合匹配的顺序说明

2 location 匹配优先级

2.1 URI匹配的规则与顺序

顺序不用URI及特殊字符组合匹配匹配说明
1location = / {}精确匹配 /
2location ^~ /1.tx {匹配常规字符串,不做正则表达式匹配检查
3

location ~ \.(txt|html|php|png)$ {

location ~* \.(txt|html|php|png)$ {

正则匹配

区分大小写与不区分大小写

4location /documents/ {匹配常规字符串,如果有正则,则优先匹配正则
5location / {所有location 都不能匹配后的默认匹配

2.2 精确匹配(location = /1.txt)

在server部分使用location配置一个web界面,例如:当访问nginx 服务器的/logo.jpg的时候要显示指定

html文件的内容,精确匹配一般用于匹配组织的logo等相对固定的URL,匹配优先级最高

2.3 区分大小写(location ~ \.(txt|html|php|png)$

~ 实现区分大小写的模糊匹配. 以下范例中,

如果访问uri中包含大写字母的logo.PNG,则以下location匹配logo.png条件不成功

因为 ~ 区分大小写,当用户的请求被执行匹配时发现location中定义的是小写的png,

本次访问的uri匹配失败,后续要么继续往下匹配其他的location(如果有),要么报错给客户端

2.4 不区分大小写(location ~* \.(txt|html|php|png)$

~* 用来对用户请求的uri做模糊匹配,uri中无论都是大写、都是小写或者大小写混合,此模式也都会匹 配,通常使用此模式匹配用户request中的静态资源并继续做下一步操作,此方式使用较多

注意: 此方式中,对于Linux文件系统上的文件仍然是区分大小写的,如果磁盘文件不存在,仍会提示404

3 URI优先级匹配案例

3.1 几种方式测试文件匹配优先级

3.1.1 测试location 的访问(同一个文件名不相同的目录)

#  这里没有增加 location /documents/ 是由于他比较特殊 echo this is 1 > /webdata/nginx/web1/1.txt
echo this is 2 > /webdata/nginx/web2/1.txt
echo this is 3 > /webdata/nginx/web3/1.txt
echo this is 4 > /webdata/nginx/web4/1.txt
echo this is 5 > /webdata/nginx/web5/1.txtmkdir -p /webdata/nginx/web{1..5}[root@RHEL-9 conf.d]# vim /usr/local/nginx/conf.d/location02.conf 
server {listen 80;index index.html;server_name www.shuyan.com;location / {root /webdata/nginx/web1;}location = /1.txt {root /webdata/nginx/web2;}location ~ \.(txt|html|php|png)$ {root /webdata/nginx/web3;}location ^~ /1.t {root /webdata/nginx/web4;}}

3.1.2 测试结果

3.1.3 location /documents 存在的特殊性

在配置文件中同时存在  location  ^~ /1    和   location /1.txt   匹配规则的时候,location ^~ /1 的优先度会降低,甚至于优先度只比 / 大

3.1.4 总结文件匹配测试

得出结论 在没有location /1.txt 干扰的时候优先级从高到低为 =  ^~  (~|~*)  /

在有 location /1.txt 的时候 location ^~ /1   的优先级会降低从高到低为   =  (~|~*)  /1.txt  ^~  /

3.2 几种方式测试目录匹配优先级

3.2.1 同一文件名不同目录 且 匹配规则是目录

其实在匹配目录的时候也是一样的 ^~ /t   和  /test  会发生冲突

[root@RHEL-9 conf.d]# vim /usr/local/nginx/conf.d/location02.conf 
server {listen 80;index index.html;server_name www.shuyan.com;  location ^~ /t {root /data/web1;}location ~* test {root /data/web2;}location /test {root /data/web3;}location / {root /data/web4;}}

3.2.2 创建目录与index.html 文件

mkdir -p /data/web{1..5}/test
echo web1 > /data/web1/test/index.html
echo web2 > /data/web2/test/index.html
echo web3 > /data/web3/test/index.html
echo web4 > /data/web4/test/index.html
echo web5 > /data/web5/test/index.html# 重启服务
[root@RHEL-9 ~]# systemctl restart nginx

3.3.3 实现效果

3.3.4 总结目录匹配

 ^~ /t   和同时出现 /test  会发生冲突

只演示一个效果与以上的文件匹配的是一样的


http://www.mrgr.cn/news/2909.html

相关文章:

  • 【Rust光年纪】探秘Rust语言数学优化库:从凸优化到线性规划
  • 如何提升 RocketMQ 顺序消费性能?
  • ISO 14001认证证书的有效期及年审要求
  • AtCoder Beginner Contest 367 A~F
  • Three.js可视化系统课程WebGL(24年3月最新版48章)
  • 口语笔记——连词
  • Java简易聊天工具(网络通信)
  • Linux下使用cat、grep、sed查看文件任意几行的数据
  • 大公报发表欧科云链署名文章:发行港元稳定币,建Web3.0新生态
  • IOS 12 自定义用户协议对话框
  • 多线程锁机制面试
  • Linux 离线安装docker和docker-compose
  • 领英(LinkedIn)公司主页创建方法分享
  • 【微信小程序】WXS脚本
  • 提取代理IP为何有最小提取间隔?如何获取自身业务有效时间代理?
  • 有哪些同声传译软件?精选5款实用工具
  • 矩阵中的最大得分(Lc3148)——动态规划
  • python-docx在word文件表格中指定行下插入新一行并填充值
  • HTML—css
  • 深度deepin v23系统也能玩《黑神话:悟空》 8GB内存、GTX 1660 Ti丝滑流畅