nginx 中 location ^~ /static/ 优先匹配静态目录并终止正则检查,搭配 alias 精准映射路径;location /res/ 采用最长前缀匹配,需注意 root 与 alias 路径拼接差异及尾部斜杠规范。

Nginx 使用 location ^~ 或 location /prefix/ 这类通用前缀匹配,能高效捕获静态资源目录,关键在于理解前缀匹配的优先级和路径规范。
用 ^~ 前缀实现精确、高效的静态目录匹配
^~ 表示“非正则前缀匹配”,一旦匹配成功,Nginx 不再检查后续正则 location(如 ~ \.js$),适合用于静态资源根目录,避免规则冲突。
- 配置示例:
location ^~ /static/ {
alias /var/www/assets/;
expires 1y;
add_header Cache-Control "public, immutable";
} -
alias必须以/结尾(如/var/www/assets/),否则会导致文件路径拼接错误;若用root,则路径是“root + 请求路径”,需注意层级差异。 - 该块会匹配所有以
/static/开头的请求(如/static/css/app.css、/static/images/logo.png),且优先级高于普通前缀(/)和大部分正则规则。
用普通前缀 location /res/ 简单覆盖子目录
不带修饰符的 location /res/ 是最常用的前缀匹配方式,适用于结构清晰、无需排除正则干扰的静态资源托管场景。
- 示例:
location /res/ {
root /data/web; # 实际文件路径为 /data/web/res/xxx
try_files $uri =404;
} - 注意
root和alias的区别:这里root会把/res/image.png映射到/data/web/res/image.png;而alias /data/web/res/则映射到/data/web/res/image.png(去掉前缀)。 - 搭配
try_files $uri =404可防止目录遍历或返回意外内容,增强安全性。
避免常见陷阱:大小写、末尾斜杠与重叠路径
前缀匹配对路径字符串逐字比较,区分大小写,且末尾斜杠影响语义——/static 和 /static/ 是两个不同前缀。
-
location /static会匹配/static、/static123、/static/file.js—— 容易误伤其他路径,应始终加尾部/(即/static/)保证语义明确。 - 多个前缀 location 存在重叠时(如
/api/和/api/v1/),Nginx 选择最长匹配项,无需额外排序,但建议保持路径层级清晰,避免维护歧义。 - 如果静态资源需支持跨域或防盗链,可在对应 location 块中直接添加
add_header Access-Control-Allow-Origin "*";或valid_referers规则。
配合 MIME 类型与压缩提升静态服务质量
仅匹配路径还不够,合理设置响应头和启用压缩,才能发挥静态资源性能优势。
- 确保
include mime.types;已加载,Nginx 才能根据扩展名自动设置Content-Type;必要时可补充:
types {
application/wasm wasm;
} - 开启 gzip 或 brotli 压缩(需编译支持):
gzip on;
gzip_types text/css application/javascript image/svg+xml;
注意:图片(jpg/png)、字体等二进制文件通常不压缩,避免增加 CPU 开销。 - 对于现代前端资源(如
.mjs、.webp),确认 Nginx 版本 ≥ 1.12(支持webp)或 ≥ 1.19(更好支持模块化 JS MIME)。











