百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

nginx(五):关于location匹配规则那些事

off999 2025-01-16 20:32 23 浏览 0 评论


关于location匹配规则那些事

  • 1 概述
  • 2 语法
  • 3 匹配规则说明
    • 3.1 精确匹配
    • 3.2 前缀匹配(^~)
    • 3.3 正则表达式匹配(\~和\~*)
    • 3.4 普通前缀匹配
  • 4 匹配优先级
  • 5 注意事项
  • 6 总结


大家好,我是欧阳方超,可以我的公众号“欧阳方超”,后续内容将在公众号首发。


1 概述

在nginx中,location块是一个重要的指令,用于定义如何处理特定的URI请求。本文将介绍location不同的匹配规则及它们的优先级。

2 语法

location语法格式

location [修饰符] URI {
    ...
}

修饰符包括:
=(精确匹配)
^~(优先前缀匹配)
~(区分大小写正则)
~*(不区分大小写正则)
空(不写修饰符,表示普通前缀匹配)

3 匹配规则说明

3.1 精确匹配

使用等号(=)表示精确匹配,只有当请求URI与指定路径完全一致时,此location才会被选中。
示例:

location = exact/path {
    return 200 '精确匹配的内容';
}

请求必须完全匹配/path才会生效,例如:

[root@hadoop102 ~]# curl -k -L  http://192.168.25.4/exact/path
精确匹配的内容

下面的路径均匹配不到:

[root@hadoop102 ~]# curl -k -L  http://192.168.25.4/path1
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.24.0</center>
</body>
</html>
[root@hadoop102 ~]# curl -k -L  http://192.168.25.4/path/
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.24.0</center>
</body>
</html>

注意,curl命令后添加 -L 选项以跟随重定向,否则curl结果只会显示第一个重定向的响应,而不会看到后续的https请求和响应(我的nginx做了配置,会把http请求重定向为https请求)。
或者curl后直接写https请求:

[root@hadoop102 ~]# curl -k  https://192.168.25.4/exact/path
精确匹配的内容

精确匹配一般适用于需要严格匹配特定URI的场景,如某个特定的文件或资源。

3.2 前缀匹配(^~)

使用^~表示前缀匹配,如果请求URI以指定的前缀开始,且该location是所有非正则location中最长的匹配前缀,nginx将选择此规则并停止后续的正则表达式匹配。

location ^~ /prefix/ {
           return 200 '前缀匹配';
        }
[root@hadoop102 ~]# curl -k https://192.168.25.4/prefix/
前缀匹配

前缀匹配一般用户处理静态文件请求,提高性能,比如在
/usr/local/nginx/resources/目录想放一张图片giraffe.jpg,location写成如下形式:

location ^~ /prefix/ {
           alias /usr/local/nginx/resources;
        }

可以通过访问
https://192.168.25.4/prefix/giraffe.jpg请求到目录下的指定资源。

3.3 正则表达式匹配(~和~*)

~表示区分大小写的正则表达式匹配,~表示不区分大小写的正则表达式匹配。正则匹配适用于需要复杂匹配逻辑的场景,如文件扩展名或特定模式。例如下面的写法将会匹配所有以 .jpg, .jpeg 或 .png 结尾的请求,且区分大小写。

location ~ \.(gif|jpg|png)$ {
            return 200 '匹配的图片类型的请求';
        }
[root@hadoop102 ~]# curl -k https://192.168.25.4/test.gif
匹配的图片类型的请求
[root@hadoop102 ~]# curl -k https://192.168.25.4/test.Gif
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.24.0</center>
</body>
</html>

下面的写法将会匹配所有以.pdf或.doc结尾的请求,且不区分大小写。

location ~* \.(pdf|doc)$ {
            return 200 '匹配到文档类型的请求';
        }
[root@hadoop102 ~]# curl -k https://192.168.25.4/test.pdf
匹配到文档类型的请求
[root@hadoop102 ~]# curl -k https://192.168.25.4/test.pdF
匹配到文档类型的请求

使用注意事项
性能考虑:正则表达式比简单字符串或前缀匹配要慢,因此应尽量将常用且简单的路径放在前面,复杂的正则表达式放在后面,以提高性能。
避免过度复杂化:尽量使用简单明了的正则表达式,避免过于复杂的模式,这样有助于维护和理解配置。
测试与验证:使用工具或在线正则测试器来验证你的正则表达式是否按预期工作,以避免配置错误。

3.4 普通前缀匹配

普通前缀匹配是指没有指定任何修饰符的location指令,优先级最低,它用于捕获所有未被其他更具体的location规则匹配到的请求。通用匹配通常被称为“默认匹配”。在多个location规则中起到最后一道防线的作用。
通用匹配的配置形式为:

location / {
    # 配置内容
}

这个规则会匹配所有请求URI,包括那些没有被其他特定规则捕获的请求,它类似于编程语言中switch-acse语句的default分支。

4 匹配优先级

nginx处理请求时,不同location对请求有不同的优先级,具体优先级顺序如下:

  1. 精确匹配(=):最高优先级,完全匹配制定URI。
  2. 前缀匹配(^~):一旦找到前缀匹配,停止后续查找。
  3. 正则表达式匹配(~和~*):分为区分大小写和不区分大小写的正则匹配。

5 注意事项

  1. 正则表达式匹配时,不包含URI参数。例如对于请求"/test?arg=123",匹配时只考虑"/test"部分
  2. location中的URI结尾是否带"/“会影响匹配结果:
    location /test 可以匹配”/test"和"/test/"
    location /test/ 只能匹配"/test/"
  3. 如果多个location都可以匹配,按照优先级顺序只会执行一个
  4. 建议配置location时:
    优先使用精确匹配
    对于静态文件使用前缀匹配
    需要正则时优先使用^~避免混淆
    总是提供一个通用的location /作为默认匹配

6 总结

Nginx中的location块提供了多种方式来处理不同类型的请求。无论是静态文件服务、动态内容代理、URL重定向还是错误处理,合理地运用这些分类和优先级,可以帮助管理员高效地管理Web服务器,提高性能和用户体验。
我是欧阳方超,把事情做好了自然就有兴趣了,如果你喜欢我的文章,欢迎点赞、转发、评论加关注。我们下次见。

相关推荐

移动硬盘强制格式化(移动硬盘强制格式化工具)

格式化移动硬盘可以通过以下步骤进行格式化:a)按Win+R唤醒运行面板,输入“diskmgmt.msc”,并按下回车键。b)找到移动硬盘对应的磁盘卷标,右键点击该磁盘卷标,然后点击“格式化”选项。...

电脑显卡在哪看(电脑显卡在哪看win10)
电脑显卡在哪看(电脑显卡在哪看win10)

在电脑上桌面中查看显卡:如果我们电脑使用的是独立显卡,显卡位置是在机箱内主板的显卡插口上;而如果我们的电脑是集成显卡的话,那么显卡的位置就在主板上,是和CPU在一起封装的。在电脑上桌面中查看显卡:可以通过桌面的我的电脑右键,点击设备管理器,...

2026-01-05 18:51 off999

tmp是什么意思(tmp的含义)

TPM(TrustedPlatformModule)安全芯片,是指符合TPM(可信赖平台模块)标准的安全芯片,它能有效地保护PC、防止非法用户访问。为了数据安全的考虑,不少笔记本都集成了安全芯片...

u盘分区工具中文版(u盘 分区表)

可以,只要是连接电脑的磁盘设备都能找到看在什么系统下做的,我以前在win7下做的,但是怎么弄都不成功,最后在xp系统下才做成了,还有就是,大白菜是一键傻瓜式的pe优盘制作工具,点击一键制作为pe启动盘...

tplink路由器wan口未连接(tp-link wan口未连接)

第一步,在新的天翼网关中关闭WIFI第二步,用一根跳线连接无线路由器,网关接到无线路由器的WAN口,然后电脑的网线可以插到无线路由器的LAN口,第三步,设置你的无线路由,如果你的网关是192.168....

华为路由器wifi6(华为路由器wifi6上不了网)

华为WiFi6路由器的设置步骤如下:1.首先,将电缆连接到WAN端口并插入网络电缆。将路由器插头插入电源插座,并打开电源开关。2.手机或电脑连接华为路由器的Wi-Fi热点,输入Wi...

主板品牌型号(主板品牌型号价格)

华硕第一(不过它的低端主板质量很差,返修率高)技嘉第二(我的主板就是技嘉的。。安全运行5年多一直没坏)微星第三(这个我不太熟悉,不过我朋友用的是微星。。也是很耐用很不错)还有EVGA主板(是美...

下载安装支付宝(苹果手机怎么下载安装支付宝)

1、首先在手机桌面上点击打开“软件商店”应用程序。2、然后在“软件商店”应用程序的搜索栏内输入“支付宝”,然后在搜索出来的选项中点击选择“支付宝”选项。3、接着在此页面可看见下载选项,然后点击下载,等...

驱动人生下载限速解除(驱动人生限速解除最简单方法)

可以设置双工模式试试:在桌面右键网上邻居,单击属性,跳出对话框,再右键本地连接,单击属性,在跳出的对话框中单击配置选项卡,再单击高级选项,在属性对话框中选中“连接速度和双工模式,”在右面值的对话框中选...

电脑运行慢换什么配件(电脑特别慢换什么硬件)

  要提高电脑游戏性能,应提升cpu、内存、显卡的配置,硬盘也是系统的一个瓶颈,因此升级建议如下:  1、cpu可升级为翼龙2四核x495595wTDP功耗;  2、内存可添加2Gddr3...

免费的微信数据恢复软件(免费的微信数据恢复软件下载)

可靠,微信数据恢复管家是一款非常好用的数据恢复软件,用户们能够在这里自由的恢复手机中的数据,包括了各种微信聊天数据、图片、短视频等等,非常的可靠。可靠。微信聊天记录恢复软件是真的。 有备份:...

windowsinstaller重装(window 重装)

原因:安装的版本起了冲突。1、测试时候电脑已安装office2016-zh-cn,准备安装visio2016。先右键点击visio2016版本,选择管理员模式进行安装。2、安装时候就会提示各种问题...

iso镜像如何安装win7(iso镜像安装教程)

可采用以下两种方法:方法1,进入BIOS,关闭SecureBoot,启动CSM或者是选择LACY引导。用U盘带的分区工具,以MBR模式进行分区,把你的WIN7镜像GHOST到活动分区。不过你的WIN...

win7模拟器破解版(win7模拟器.apk)

启动模拟器之后,找到设置图标点击进入。2点击显示。3取消自动旋转屏幕的勾选。因为在电脑上使用android模拟器,不存在自动旋转屏幕的效果的模拟,所以这个功能对于模拟器是什么用的。而且如果模拟...

word密钥激活码2016(word 2016激活码)

1、office2016包含word、excel、powerpoint等组件,直接使用office2016密钥就能激活word2016。2、如果你安装的是word2016独立组件,也有独立的word2...

取消回复欢迎 发表评论: