Nginx location匹配优先级为:=精确匹配 → ^~前缀优先 → ~/~正则顺序扫描 → /通用匹配;前缀匹配区分普通(最长匹配)与^~(跳过正则),正则匹配分~(大小写敏感)和~(不敏感),需注意书写顺序与性能差异。

在 Nginx 中,前缀匹配和区分大小写修饰符是 location 配置里最常用、也最容易混淆的两类规则。它们控制请求路径如何被识别和分发,直接影响静态资源服务、API 路由、重定向等行为。
前缀匹配:用 / 或 ^~ 实现
前缀匹配不依赖正则引擎,只看 URI 是否以指定字符串开头,性能高、逻辑清晰。
-
普通前缀匹配(无修饰符):例如
location /api/ { ... },匹配所有以/api/开头的请求,如/api/users、/api/v1/login;Nginx 会找出所有匹配项中「最长」的那个来使用。 -
带
^~的前缀匹配:例如location ^~ /static/ { ... },同样匹配以/static/开头的请求,但一旦命中,Nginx 就跳过后续所有正则匹配(~和~*),直接执行该块。适合明确禁止正则干扰的静态资源目录。 - 注意:
^~不是正则符号,只是 Nginx 内部标识符;它后面跟的仍是普通字符串,不支持正则语法(比如不能写^~ /static/\d+)。
区分大小写修饰符:~ 和 ~*
这两类用于需要按字符精确判断的场景,比如 RESTful 接口版本号、特定文件后缀处理,或大小写敏感的旧系统兼容。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
-
~(区分大小写正则):例如location ~ \.php$ { ... }只匹配以小写.php结尾的请求,/index.PHP或/test.Php不会命中。 -
~*(不区分大小写正则):例如location ~* \.(jpg|jpeg|png|gif)$ { ... },能同时匹配.JPG、.Png等各种大小写组合。 - 正则匹配按配置文件中的书写顺序从上到下扫描,遇到第一个成功匹配就停止,不继续往下找。所以把更具体的正则放在前面,避免被宽泛规则“截胡”。
实际搭配建议
多数生产配置会混合使用,关键在于理解优先级链:
- 先查
=(精确匹配),没有就查^~(前缀优先),再查~/~*(正则顺序扫描),最后 fallback 到/(通用匹配)。 - 例如想让
/admin走精确路由,/admin/及其子路径走前缀,其余/adminxxx类请求交由正则过滤——就要分开写三个location块,并注意顺序。 - 调试时可用
nginx -t检查语法,配合error_log /path/to/log notice;查看实际匹配了哪个 location(需开启 notice 级别日志)。
常见误区提醒
不要以为 location /ABC/ 能匹配 /abc/ —— 普通前缀匹配是严格字面匹配,大小写敏感;要实现不区分大小写的前缀效果,只能用 ~* 正则,例如 location ~* ^/abc/ { ... },但要注意它会触发正则扫描流程,性能略低。

















