^~ 是 nginx 中用于前缀匹配且禁止后续正则检查的 location 修饰符,优先级高于正则和普通前缀匹配,但低于精确匹配(=),仅支持字面量路径前缀,性能高、确定性强。

在 Nginx 中,^~ 是 location 指令的修饰符之一,用于**前缀匹配且禁止正则表达式后续检查**,适合需要高效、确定性匹配静态资源路径的场景。
^~ 的作用机制
^~ 表示“以指定字符串开头的最长前缀匹配”,一旦命中,Nginx 会立即选用该 location 块处理请求,**跳过所有后续的正则表达式(~ 和 ~*)匹配**。它不支持通配符或正则语法,只做纯字符串前缀比较,性能优于正则,也比无修饰符的前缀匹配(如 location /img/)具有更高优先级。
与其它 location 匹配规则的优先级关系
Nginx 的 location 匹配顺序是严格固定的:
-
精确匹配(
=) —— 优先级最高,完全相等才命中 - ^~ 前缀匹配 —— 最长前缀匹配成功即终止,不查正则
-
正则匹配(
~区分大小写,~*不区分) —— 按配置文件中出现顺序逐条检查,首个匹配生效 - 普通前缀匹配(无修饰符) —— 仅当上面都未命中时,取最长前缀
注意:^~ 不比 = 高,但比所有正则和普通前缀更早“截断”匹配流程。
典型使用示例:强制用 ^~ 加速静态资源服务
比如要把所有 /static/ 开头的请求交给本地目录,且避免被后面的正则规则干扰:
location ^~ /static/ {
alias /var/www/assets/;
expires 1h;
add_header Cache-Control "public, immutable";
}
此时访问 /static/js/app.js 或 /static/css/main.css 都会命中该块;即使配置文件后面还有 location ~ \.js$ { ... },也不会被触发。
常见误区与注意事项
-
^~后面必须跟**字面量路径前缀**,不能含正则字符(如^~ /api/v[0-9]/是非法的,会报错) -
^~ /a会匹配/abc、/a?x=1、/a/,但不匹配/b/a - 若同时存在
location ^~ /a和location ^~ /ab,请求/ab/c会命中更长的/ab块 - 使用
alias时注意末尾斜杠:如果location ^~ /static/,alias路径应以/结尾(如/var/www/assets/),否则文件映射可能出错
不复杂但容易忽略。











