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

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

off999 2025-01-16 20:32 19 浏览 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服务器,提高性能和用户体验。
我是欧阳方超,把事情做好了自然就有兴趣了,如果你喜欢我的文章,欢迎点赞、转发、评论加关注。我们下次见。

相关推荐

如何卸载显卡驱动(主板驱动)
  • 如何卸载显卡驱动(主板驱动)
  • 如何卸载显卡驱动(主板驱动)
  • 如何卸载显卡驱动(主板驱动)
  • 如何卸载显卡驱动(主板驱动)
wifi怎么设置网速快(手机测wifi网速怎么测)

wifi加速设置方法步骤如下。1设置网速:浏览器中输入终端地址,输入账号和密码。找到连接设备数目并进行更改,找到信道宽度,选择更快的网速。2提高WiFi网速:进入设置中心,点击WLAN选项。点击高级设...

华硕驱动软件叫什么(华硕自带驱动管理软件)

q-installer驱动啥意思?华硕q-installer驱动能让用户更加方便地管理各种文件。将会同时显示4个Windows资源管理器的窗口,这样能让用户更加简单地对文件进行一些操作,例如复制,粘贴...

懂行的人建议买华为还是惠普电脑

华为电脑好。华为笔记本电脑主打的就是轻薄,质感,多屏协同生态,面向商务人群和学生党。目前在售的机型并不多,但每一台机子本身都不错,不过因为被制裁的缘故,定价过高,性价比打折扣。惠普笔记本好,惠普除了家...

如何把win系统换成安卓(怎么把系统改为win10)

方法/步骤分步:1首先点击打开酷安应用市场;2点击打开位于屏幕右下方的“应用游戏”选项;3选择想要下载的软件或者游戏app,点击进入;4选择“下载”按钮,点击开始下载;5APP下载完成后,系统会自动跳...

win7摄像头软件哪个好(win7摄像头软件ecap)
  • win7摄像头软件哪个好(win7摄像头软件ecap)
  • win7摄像头软件哪个好(win7摄像头软件ecap)
  • win7摄像头软件哪个好(win7摄像头软件ecap)
  • win7摄像头软件哪个好(win7摄像头软件ecap)
如何复制粘贴(如何复制粘贴excel表格内容)
如何复制粘贴(如何复制粘贴excel表格内容)

需要复制文字的时候只要先选中文字,然后同时按住Ctrl+C键,然后松手就已经复制了文字,在需要粘贴的地方同时按住:Ctrl+V就可以看到文字被粘贴了,非常的方便。扩展资料:Alt键,这个键叫做改变,很多快捷键都需要使用到这个键,矩形...

2025-11-14 05:51 off999

hotmail电子邮箱登录(hotmail邮箱在线登录)

***@hotmail.com1、其中***是你自己申请的邮箱的用户名。2、hotmail要写在符号@后面。3、最后加上.com,这样就是一个完整的hotmail邮箱的格式。4、比如:zhangj...

qq恢复官方网站聊天记录(qq恢复聊天记录在哪里)
  • qq恢复官方网站聊天记录(qq恢复聊天记录在哪里)
  • qq恢复官方网站聊天记录(qq恢复聊天记录在哪里)
  • qq恢复官方网站聊天记录(qq恢复聊天记录在哪里)
  • qq恢复官方网站聊天记录(qq恢复聊天记录在哪里)
win10iso文件(win10iso文件怎么安装)

安装Win10ISO系统文件需要以下步骤:1.首先需要从Microsoft官网下载Win10ISO系统文件,打开网站后选择Win10的版本、语言和架构(32位或64位),点击下载即可。2.下载...

qq邮箱登录不上去怎么回事(qq邮箱怎么登陆不上去)
  • qq邮箱登录不上去怎么回事(qq邮箱怎么登陆不上去)
  • qq邮箱登录不上去怎么回事(qq邮箱怎么登陆不上去)
  • qq邮箱登录不上去怎么回事(qq邮箱怎么登陆不上去)
  • qq邮箱登录不上去怎么回事(qq邮箱怎么登陆不上去)
英特尔显卡性能排行(英特尔显卡性能排行天梯图)

IRIS(英特尔第四/五代集成显卡)英特尔第四代集成显卡,分为HD4200/4400/4600,HD5100/5200。代号为GT2/3/3e,中文名为锐炬。hd420044004600和台式...

电脑做系统u盘启动选项(做系统开机u盘怎么选择)

操作须知:1、设置U盘启动分很多种:传统legacy机型设置、uefi新机型设置、uefi机型改legacy启动设置2、由于电脑品牌以及机型非常多,这边仅列举一部分电脑的设置方法,3、如果是uefi机...

未安装nvidia控制面板(电脑未安装nvidia控制面板)

如果你使用的是Nvidia显卡,但未安装Nvidia控制面板,则可能会遇到以下问题:1.无法进行高级显卡设置:Nvidia控制面板提供了高级显卡设置选项,例如显卡超频、显示器分辨率和刷新率、视频调整...

u盘检测不到怎么修复(u盘检查不了是什么原因)

以下是可能的解决办法:1.更换不同的USB端口。有时候电脑某个USB端口可能出现问题,试试换一个不同的端口。2.重启电脑。有时候出现问题的USB端口可能需要重启才能正常。3.插拔几次U盘。有时候...

取消回复欢迎 发表评论: