首页 > 系统相关 >Nginx的location优先级

Nginx的location优先级

时间:2022-09-24 11:46:56浏览次数:55  
标签:abc 优先级 匹配 Nginx 正则 location images path

在nginx配置文件中,location主要有这几种形式:

语法:location [=|^~|~|~*|@] /uri/ { … } 
功能: 根据URI的不同需求进行配置,可以使用字符串与正则表达式匹配。 如果要使用正则表达式,你必须指定下列前缀: 
~* 不区分大小写。 
~ 区分大小写。
具体匹配形式如下:
1.  正则匹配 location ~ /abc { }
2.  不区分大小写的正则匹配 location ~* /abc { }
3.  匹配路径的前缀 location ^~ /abc { } 
4.  精确匹配 location = /abc { }
5.  普通路径前缀匹配 location /abc { }

# 优先级:
4 > 3 > 2 > 1 > 5

具体解释:

location = / { 
	# 精确匹配 / ,主机名后面不能带任何字符串 
	[ path A ] 
}

location / { 
	# 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求 
	# 但是正则和最长字符串会优先匹配 
	[ path B ] 
}

location /documents/ { 
	# 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索 
	# 只有后面的正则表达式没有匹配到时,这一条才会采用这一条 
	[ path C ] 
}

location ~ /documents/Abc { 
	# 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索 
	# 只有后面的正则表达式没有匹配到时,这一条才会采用这一条 
	[ path CC ] 
}

location ^~ /images/ { 
	# 匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条。 
	[ path D ] 
}

location ~* \.(gif|jpg|jpeg)$ { 
	# 匹配所有以 gif,jpg或jpeg 结尾的请求 
	# 然而,所有请求 /images/ 下的图片会被 path D 处理,因为 ^~ 到达不了这一条正则 
	[ path E ] 
}

location /images/ { 
	# 字符匹配到 /images/,继续往下,会发现 ^~ 存在 
	[ path F ] 
}

location /images/abc { 
	# 最长字符匹配到 /images/abc,继续往下,会发现 ^~ 存在 
	# F与G的放置顺序是没有关系的 
	[ path G ] 
}

location ~ /images/abc/ { 
	# 只有去掉 path D 才有效:先最长匹配 path G 开头的地址,继续往下搜索,匹配到这一条正则,采用 
	[ path H ] 
}

测试匹配顺序

1. 以下两个匹配规则同时存在时的匹配结果:

2. 以下三个匹配规则同时存在时的匹配结果:


可以看出:正则匹配要大于通用匹配

3. 多个正则匹配


可以看出:多个正则匹配的时候,只匹配到第一个符合条件的正则;

4. 添加精准匹配


只要存在精准匹配,则优先匹配精准匹配;

总结如下

1 匹配优先级如下

① = 精确匹配
② ^~ 优先匹配常规字符串,匹配后,不检查正则
③ ~* 正则匹配 示例: ~*.(gif|jpg|jpeg)$
④ / documents/ 匹配常规字符 documents 代表目录,可以是其他值
⑤ / 所有location无法匹配,则显示该默认匹配

以上可以都有,也可以都没有,如果都有,则按照以上优先级匹配。

标签:abc,优先级,匹配,Nginx,正则,location,images,path
From: https://www.cnblogs.com/wqlken/p/16725250.html

相关文章

  • nginx搭建文件服务器
    搭建简易步骤:1)修改固定配置配置目录显示autoindexon;文件大小显示autoindex_exact_sizeon;文件修改时间autoindex_localtimeon;编码charsetutf-8;2)配置开......
  • Ubuntu安装Nginx以及部署
    前言:在笔者以往的工作经历中,很少涉及服务器的管理工作,没有涉及过Linux以及基于Linux的各种系统。这次因工作需要,折腾了许久把一些在项目中所需要运用到的命令也一并记录......
  • 如何查看nginx的用户名及用户组?
    https://www.656463.com/wenda/rhcknginxdyhmjyhz553_58nginx的用户名在/etc/nginx/nginx.conf配置文件中,有一个user参数,查看对应的就可以。此外使用psaxu|grepnginx来......
  • 网络服务-nginx进阶
    1.写出几个nginx的常用模块,并描述其功能    使用的算法:RR算法轮询算法加权轮询ip_hash源地址hashleast_conn最少连接 LAMP使用apache连接phpLNMP......
  • CSS的优先级如何计算?
    选择器的特殊性值分为四个等级行内样式:X000id选择器:0X00类选择器/伪类选择器/属性选择器:00X0元素选择器/伪元素选择器:000X在判断优先级时先看是否......
  • Windows server + nginx + jemeter压测大量请求失败
    大规模Windows环境下,采用Nginx反向代理服务后,操作系统会产生较多TIME_WAIT的TCP(TransmissionControlProtocol)连接,操作系统默认TIME_WAIT的TCP连接回收时间是4分钟,TCP默认......
  • Servlet中<url-pattern>的优先级
    我们可以从简单的一个demo中体现出来这个demo模块有web框架支持例如我们写一Hello,Servlet首先我们先在pom.xml中配置servlet<dependencies><!--https://mvnreposi......
  • confd+Nacos实现nginx配置文件管理
    场景:由于公司内部站点保护的需求,将部分的站点添加白名单,这边的操作是在nginx配置文件中添加如下代码allow127.0.0.1:denyall;但随之问题也出现了,需要添加......
  • 前端项目在nginx中部署
    步骤如下:项目打包:在vscode或idea中使用命令yarnbuild打包文件,生成dist文件将项目上传到服务器。将dist文件上传到服务器路径:/usr/local/nginx/html重启nginxcd/......
  • nginx系列---【解决 413 Request Entity Too Large(请求实体太大)】
    1.问题描述后台管理系统上传一个30M视频的时候,报“413RequestEntitytoolarge”错误,导致文件无法上传。2.原因分析F12打开控制台,发现调用后端上传接口失败,报......