nginx的location匹配规则

本文详细解释了Nginx配置中location指令的多种匹配模式,包括精确匹配、前缀匹配、正则表达式匹配以及命名location的使用。还介绍了URI规范化过程和匹配流程,以及匹配未成功时的404处理。
摘要由CSDN通过智能技术生成

  nginx提供了非常灵活的location uri路径匹配功能。在配置文件中格式如下:

语法:	location [ = | ~ | ~* | ^~ ] uri { ... }
        location @name { ... }
默认值:	—
上下文:	server, location

  先总结一下location的类型:

  • 精确匹配的location
    例如:location = /a.txt
    匹配一个为/a.txt的uri,完整的url可以是 http://host/a.txt?q=xxx

    再如:locaiton = /
    匹配一个为/的uri, 完整的url可以是 http://host/?q=xxx

  • 模糊匹配的location

    • 前缀匹配
      例如:location /a/b/c/
      匹配一个以/a/b/c/为前缀路径的uri
      完整的url可以是 http://host/a/b/c/x.jpg,或者:http://host/a/b/c/xxx/m.php?q=xxxx

    • 正则匹配

      • 不忽略大小写
        例如:location ~* .(gif|jpg|jpeg)$
        匹配所有以gif或者jpg或者jpeg为文件扩展名的uri,并且后缀名不区分大小写

      • 忽略大小写
        例如: location ~ .mp4$
        匹配所有以mp4为扩展名的uri,并且区分后缀名的大小写

      • 正则前缀匹配
        例如:location ^~ /images
        匹配所有以/images开头的uri

  • 默认匹配的location
    例如:location /
    匹配所有uri的请求

  • 命名location
    即以@开头的location,命名location不能嵌套。
    命名location不会匹配任何uri的请求,命名 ”location“ 的作用是在当前 Nginx 服务器块内部进行重定向,而不是向客户端发送 HTTP 重定向响应。它通常用于在同一个服务器块内部处理请求的不同部分,以实现代码的重用和简化配置。它也是非常有用的,有时候我们可以通过lua脚本(在openresty中)或者自研nginx插件模块,根据相应的业务规则将某些请求转发到特定的命名location中执行相应的业务逻辑。

  nginx在匹配配置文件中的location前,先会对uri进行规范化,将%XX的编码进行解码,然后解析相对路径组件中的引用 “.” 和 “…”,并将出现的连续两个或多个相邻斜杠压缩为单个斜杠。然后开始匹配:

  1. nginx执行精确匹配,匹配则选中该location并结束;
  2. nginx执行最长前缀匹配,无论是否选出最长匹配,都还需要继续进行第3步;
  3. 按配置文件中的顺序搜索正则location规则,直到匹配到第一个location规则,选中该location并结束。如果所有正则规则都没有匹配到,并且第二步已经最长匹配到了某个location,则选中该location并结束;
  4. 如果有默认匹配的location,则选中它并结束。
  5. 匹配失败,nginx最终返回404。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农心语

您的鼓励是我写作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值