Nginx配置文件中location块的匹配规则和优先级

2025-05-15 5

Image

在Nginx配置中,location 块用于定义如何处理不同的URI请求。其匹配规则和优先级是配置中的核心概念,以下是详细说明:


1. 匹配规则类型

Nginx的location支持四种匹配方式,按优先级从高到低排列:

(1) = 精确匹配

  • 仅当请求的URI与指定模式完全一致时匹配。
  • 示例
    location = /login {
        # 仅匹配 /login,不匹配 /login/ 或 /login.html
    }
    

(2) ^~ 前缀匹配(非正则)

  • 匹配以指定模式开头的URI,一旦匹配成功则停止后续正则匹配
  • 示例
    location ^~ /static/ {
        # 匹配 /static/js/a.js,但不匹配 /static(末尾无斜杠时可能触发其他规则)
    }
    

(3) ~~* 正则匹配

  • ~:区分大小写的正则匹配。
  • ~*:不区分大小写的正则匹配。
  • 按配置文件中的顺序匹配,个匹配成功的规则生效
  • 示例
    location ~ \.php$ {
        # 匹配所有以 .php 结尾的请求(如 /index.php)
    }
    location ~* \.(jpg|png)$ {
        # 匹配所有 .jpg 或 .png 结尾的请求(不区分大小写)
    }
    

(4) 普通前缀匹配

  • 不带任何修饰符的前缀路径(如/path/)。
  • 如果其他更高优先级的规则未匹配,则会检查此类规则。
  • 示例
    location / {
        # 默认匹配所有请求,但优先级
    }
    

2. 优先级顺序

  1. = 精确匹配 > ^~ 前缀匹配 > 正则匹配(~~* > 普通前缀匹配
  2. 正则匹配按配置文件中的书写顺序生效,先匹配到的优先。
  3. 普通前缀匹配若有多条,选择最长前缀的规则。

3. 匹配流程示意图

请求URI → 检查`=` → 检查`^~` → 按顺序检查正则 → 最后检查普通前缀

4. 常见误区与注意事项

  • 斜杠问题
    /static/static/ 不同,后者要求URI末尾必须有斜杠。
  • 正则顺序
    即使更宽泛的正则写在前面,也会优先匹配,因此需注意顺序。
  • 性能优化
    高频路径建议用^~=,避免正则回溯。

5. 示例配置

server {
    location = /favicon.ico {
        # 精确匹配,优先级
        access_log off;
    }

    location ^~ /assets/ {
        # 静态资源目录,避免正则检查
        root /data;
    }

    location ~* \.(js|css)$ {
        # 匹配JS/CSS文件,不区分大小写
        expires 7d;
    }

    location / {
        # 默认规则
        try_files $uri $uri/ /index.html;
    }
}

通过合理设计location规则,可以高效处理不同类型的请求。

(本文来源:https://www.nzw6.com)

1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!cheeksyu@vip.qq.com
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
4. 如果您也有好的资源或教程,您可以投稿发布,成功分享后有积分奖励和额外收入!
5.严禁将资源用于任何违法犯罪行为,不得违反国家法律,否则责任自负,一切法律责任与本站无关