Nginx location匹配分区分大小写正则(~)、不区分大小写正则(~)和普通前缀匹配(无修饰符或^~);~逐行扫描首匹即停,~自动转小写比对,普通匹配为字节级精确比较;需转义正则特殊字符,优先用^~替代正则提升性能。

Nginx 的 location 指令支持多种匹配方式,区分大小写和正则表达式匹配是其中两类关键能力,它们通过不同的修饰符明确指定,且有固定优先级顺序。
区分大小写的正则匹配(~)
使用 ~ 修饰符表示启用区分大小写的 PCRE 正则匹配。Nginx 会逐行按配置顺序扫描所有 ~ 规则,一旦匹配成功即执行对应块,不再继续向下匹配同级正则规则。
- 示例:
location ~ /api/[A-Z]+/v\d+/只匹配类似/api/USER/v1/,不匹配/api/user/v1/ - 注意:正则中若含特殊字符(如
.、?、$),需正确转义;$表示 URI 结尾,常用于精确后缀控制 - 常见用途:强制要求接口路径大写命名、区分不同版本前缀等
不区分大小写的正则匹配(~*)
~* 是 ~ 的忽略大小写版本,语法相同但匹配时自动转换为小写再比对,适合对 URL 中的参数名、扩展名等做宽松处理。
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 示例:
location ~* \.(jpg|jpeg|png|gif)$同时匹配.JPG、.png、.Gif - 与
~共存时,两者独立排序,优先级相同,但按配置文件中出现顺序决定谁先被尝试 - 避免滥用:若仅需简单后缀判断,用
^~或普通前缀更高效(正则有性能开销)
区分大小写的普通匹配(无修饰符或 ^~)
严格来说,普通前缀匹配(如 location /Admin/)和 ^~ 匹配本身**不涉及大小写逻辑判断**——它们是字面量精确比较,区分大小写是自然行为(因为 URI 路径本身区分大小写)。例如:
-
location /Admin/匹配/Admin/login,但不匹配/admin/login -
location ^~ /Static/匹配/Static/css/app.css,也不匹配/static/js/ - 这种“区分大小写”是字符串逐字节比对的结果,并非正则特性,也不触发正则引擎
如何验证是否生效
可借助 Nginx 内置变量和日志辅助调试:
- 在
location块中添加access_log /var/log/nginx/debug.log main;并配合自定义 log_format 输出$uri和$request_uri - 用
curl -I http://localhost/YourTestPath查看响应头中的Server或自定义add_header X-Matched-Location "xxx"; - 修改配置后务必运行
nginx -t校验语法,再nginx -s reload生效

















