nginx静态资源路由应优先用location ^~ /static/前缀匹配,配root和expires;分散资源用location ~* .(jpg|png|...)$兜底,放于前缀规则之后;禁用alias防路径错乱;关闭日志、启用缓存与gzip_static提升性能。

写静态资源的通用路由,核心是让 Nginx 直接读取磁盘文件返回,不走后端。关键不在“怎么写一行”,而在于匹配方式选对、路径拼对、缓存配对。
匹配方式优先用前缀匹配(^~),不是正则
比如所有静态资源都放在 /static/ 路径下,就该这样写:
-
推荐:
location ^~ /static/ { root /var/www; expires 30d; } - 请求
/static/css/app.css→ 实际读取/var/www/static/css/app.css -
^~表示前缀匹配且终止后续正则检查,性能高、逻辑稳 - 避免用
location ~* \.css$这类后缀匹配来兜底,它会强制扫描所有规则,容易误匹配或漏覆盖
后缀匹配只做补充,专用于分散存放的资源
当图片、字体、图标等文件没统一在 /static/ 下,而是散落在不同目录时,才用正则兜底:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
location ~* \.(jpg|png|gif|woff2|svg)$ { root /data/assets; expires 1y; add_header Cache-Control "public"; }-
~*不区分大小写,兼容.JPG和.jpg - 注意:这类规则要放在
^~规则之后,否则可能被跳过 - 如果同时有
/images/logo.png和/static/images/logo.png,建议统一归口,别靠正则“猜路径”
root 和 alias 别混用,路径拼接逻辑完全不同
这是上线出错最多的地方:
-
root /var/www;+location /img/ { ... }→ 请求/img/logo.png对应文件是/var/www/img/logo.png -
alias /var/www/images/;+location /img/ { ... }→ 请求/img/logo.png对应文件是/var/www/images/logo.png(/img/被整个替换) - alias 的路径必须以 / 结尾,否则会拼错;root 不需要结尾 /
- 建议新项目统一用
root,语义清晰、不易出错
加缓存头和关日志,提升性能与可维护性
静态资源一旦发布基本不变,缓存策略要一步到位:
-
expires 30d;或add_header Cache-Control "max-age=2592000, public"; -
access_log off;关闭访问日志——图片请求量大,日志写入反而拖慢响应 - 可选加
gzip_static on;,提前压缩好.gz文件,Nginx 直接发,省 CPU - 防盗链可加
valid_referers none blocked server_names *.yourdomain.com;+if ($invalid_referer) { return 403; },但慎用,可能误杀搜索引擎或微信内嵌










