当前位置: 首页 > article >正文

Nginx location匹配模式详解

以下是对 Nginx location 匹配模式的详细说明及代码示例,包含注释解析:


1. 精确匹配(Exact Match)

语法: location = /path { ... }
优先级: 最高,仅当请求路径与 /path 完全一致时触发。

location = /login {# 仅匹配 `/login` 路径(区分大小写)# 例如:https://example.com/loginproxy_pass http://backend/login;
}

2. 前缀匹配(Prefix Match)

普通前缀匹配

语法: location /prefix { ... }
优先级: ,按配置文件顺序匹配,但可能被正则匹配覆盖。

location /static/ {# 匹配以 `/static/` 开头的路径,如 `/static/css/style.css`# 但如果没有 `^~` 修饰符,可能被后续正则匹配覆盖root /var/www/html;
}
优先前缀匹配

语法: location ^~ /prefix { ... }
优先级: 中高,匹配以 /prefix 开头的路径,且不再检查后续正则匹配

location ^~ /images/ {# 匹配以 `/images/` 开头的路径,如 `/images/logo.png`# 即使后续有正则匹配 `/images/.*\.png`,此配置仍优先root /data;
}

3. 正则匹配(Regular Expression Match)

区分大小写的正则

语法: location ~ /regex/ { ... }
优先级: ,按正则出现的顺序匹配,第一个匹配成功的生效。

location ~ \.php$ {# 匹配以 `.php` 结尾的路径(区分大小写),如 `/index.php`# 不会匹配 `/index.PHP`fastcgi_pass php:9000;
}
不区分大小写的正则

语法: location ~* /regex/ { ... }
优先级: ,同上,但忽略大小写。

location ~* \.(jpg|png|gif)$ {# 匹配 `.jpg`, `.png`, `.gif` 结尾的路径,不区分大小写# 如 `/image.JPG` 或 `/image.jpg`expires 30d;
}

4. 最长前缀匹配(Longest Prefix Match)

语法: location /longest/possible/path { ... }
优先级: ,当无精确或正则匹配时,选择最长前缀路径。

location /documents/ {# 匹配 `/documents/` 开头的路径,如 `/documents/report.pdf`root /var/data;
}location /documents/reports/ {# 更长的前缀,如 `/documents/reports/2023.pdf`root /var/special-data;
}

优先级总结

优先级从高到低排序:

  1. 精确匹配 (location = /path)
  2. 优先前缀匹配 (location ^~ /prefix)
  3. 正则匹配 (location ~ /regex/location ~* /regex/)
  4. 普通前缀匹配 (location /path)

完整示例配置

server {listen 80;server_name example.com;# 1. 精确匹配(最高优先级)location = /logo.png {root /var/www/exact;}# 2. 优先前缀匹配(次高优先级)location ^~ /static/ {root /var/www/static;}# 3. 正则匹配(区分大小写)location ~ /user/\d+ {proxy_pass http://user_backend;}# 4. 正则匹配(不区分大小写)location ~* \.(js|css)$ {root /var/www/assets;}# 5. 普通前缀匹配(最低优先级)location / {root /var/www/default;}
}

匹配过程解析

  1. 请求 /logo.png → 命中 location = /logo.png(精确匹配)。
  2. 请求 /static/css/style.css → 命中 location ^~ /static/(优先前缀匹配)。
  3. 请求 /user/123 → 命中 location ~ /user/\d+(正则匹配)。
  4. 请求 /IMAGE.JPG → 命中 location ~* \.(js|css)$(不区分大小写的正则匹配)。
  5. 请求 /about → 命中 location /(普通前缀匹配)。

调试技巧

  • 使用 nginx -T 查看完整配置。
  • 通过 error_log logs/error.log debug; 启用调试日志。
  • 在线工具测试正则:Nginx Location Tester。

通过理解这些规则,可以更精准地控制 Nginx 的路由逻辑!

http://www.lryc.cn/news/2387053.html

相关文章:

  • Vue 3 路由传参使用指南
  • vscode使用ssh链接服务器
  • 企业批量处理刚需PrintPDF 网络财务办公打印 网页到 Office 一键转 PDF
  • Python学习笔记--Django 表单处理
  • Python - 文件部分
  • 【监控】Blackbox Exporter 黑盒监控
  • 历年福州大学保研上机真题
  • 【RAG】ragflow源码亮点:文档embedding向量化加权融合
  • 大模型学习笔记day2 LoRA微调
  • Maven-概述-介绍安装
  • GitHub Page填写域名显示被占用
  • js实现监听Ctrl/Cmd+C复制、Ctrl/Cmd+Z撤销 等快捷键
  • java高级 -动态代理
  • 机器学习算法:线性回归
  • NotePad++编辑Linux服务器文档
  • 常见小问题(Open Folder as PyCharm Project)
  • 第四十四节:目标检测与跟踪-模板匹配
  • Trae中使用mcp连接MariaDB
  • 第12次04 :首页展示用户名
  • MFC: 文件加解密(单元测试模块)
  • vue+ThreeJs 创建过渡圆圈效果
  • MySQL:12_视图
  • 2025 年开源 LLM 发展趋势细致解读
  • win11+vs2022 安装opencv 4.11.0图解教程
  • n8n 读写本地文件
  • 详解3DGS
  • DEBUG设置为False 时,django默认的后台样式等静态文件丢失的问题
  • 如何提高服务器的QPS来应对618活动的并发流量
  • LlamaFirewall:开源框架助力检测与缓解AI核心安全风险
  • java基础知识回顾3(可用于Java基础速通)考前,面试前均可用!