静态资源缓存清除需提前设计组合方案:一、用contenthash生成带哈希文件名并配长缓存;二、启用ngx_cache_purge模块提供purge接口;三、html等设短缓存+协商缓存;四、脚本定期清理proxy_cache磁盘缓存。

静态资源缓存清除策略不是“自动触发”的动作,而是需要提前设计、配合部署流程和运行时机制的一套组合方案。核心目标是:让新版本资源能被用户立即获取,同时避免旧缓存长期残留导致内容不一致。
一、用版本号或哈希值控制缓存失效(推荐首选)
这是最可靠、零运维成本的方式,本质是让新文件拥有新 URL,浏览器自然跳过旧缓存。
- 构建工具(如 Webpack/Vite)启用 contenthash 或 fullhash,生成类似
main.a1b2c3d4.js的文件名 - HTML 中引用该带哈希的路径,例如:
<script src="/js/main.a1b2c3d4.js"></script> - Nginx 配置中对静态后缀统一设长缓存(如
expires 1y),因为文件名变了,旧缓存就彻底失效
二、配置可手动触发的缓存清理入口(需模块支持)
适用于必须复用相同 URL(如 HTML、API 响应)且需紧急下线旧内容的场景。
- 确认 Nginx 已编译安装 ngx_cache_purge 模块(可通过
nginx -V 2>&1 | grep -o with-http-cache-purge-module检查) - 在
http或server块中定义缓存区,例如:proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=static_cache:20m max_size=500m; - 添加专用清理 location:
allow 127.0.0.1;
deny all;
proxy_cache_purge static_cache $scheme$host$1$is_args$args;
}
- 部署后执行
curl -X PURGE http://localhost/purge/css/app.css即可清除对应路径缓存
三、通过短缓存 + 强制校验实现“软更新”
适合无法修改文件名、又不想完全禁用缓存的 HTML 或动态模板类资源。
- 对
.html文件设置短有效期并启用协商缓存:
expires 1m;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
add_header Last-Modified $date_gmt;
add_header ETag ""; # 或用 $upstream_http_etag
if_modified_since before;
}
- 浏览器每次请求会带
If-None-Match或If-Modified-Since,Nginx 可返回304 Not Modified,节省带宽;若文件已更新,则返回新内容
四、定期或按需清理磁盘缓存文件
针对 proxy_cache 存储在本地磁盘的缓存,可结合系统任务或发布脚本执行。
- 直接清空缓存目录(注意路径需与
proxy_cache_path一致):sudo rm -rf /var/cache/nginx/* - 写入发布脚本,在上线新版本后自动执行清理,并 reload Nginx:
sudo nginx -s reload - 慎用
systemctl restart nginx—— 会中断连接,reload 更平滑











