确保静态资源文件不丢失且与缓存策略一致:只备份真实静态文件(如/var/www/html),不备份proxy_cache目录;适配contenthash命名;避开缓存更新窗口备份;备份后联动清除nginx及浏览器缓存。

明确备份对象:只备份真实静态文件,不备份 Nginx 缓存目录
静态资源文件(如 /var/www/html/js/app.a1b2c3.js)是源数据,必须定期归档;而 Nginx 的 proxy_cache 目录(如 /var/cache/nginx)只是临时副本,可随时重建,不应作为备份目标。
- 备份脚本应聚焦在
STATIC_ROOT路径(如/var/www/html),而非/var/cache/nginx - 若误将 proxy_cache 目录纳入备份,恢复时反而可能引入过期或损坏的缓存碎片,干扰正常服务
- 清理旧备份时,也只需针对
/backup/static/下的 tar.gz 文件,不碰 Nginx 缓存路径
备份脚本需适配缓存策略中的文件命名规则
如果你用 Webpack/Vite 启用了 contenthash(如 main.e8f7a2d4.css),每次构建都会生成新文件名——这意味着备份脚本无需担心覆盖冲突,但必须确保:
- 备份前不删除原目录(避免构建中被清空导致空包)
- tar 打包时使用
-C切换到父目录再指定子目录名,防止路径嵌套错误 - 排除构建中间产物(
.git、node_modules、dist/.vite等),只保留最终上线的静态文件
备份时机要避开缓存更新窗口,防止状态不一致
Nginx 浏览器缓存依赖文件内容与 URL 的强绑定。若在前端刚发布新版本、CDN 还未刷新完时执行备份,可能存下“半新半旧”的混合快照,后续回滚会出问题。
- 建议将备份任务安排在每日凌晨 3:15,此时业务低峰且多数 CDN 已完成预热
- 若采用灰度发布,可在所有节点完成更新后,由部署脚本主动触发一次备份(而非仅依赖 cron)
- 备份日志中记录当前 Git commit ID 或构建时间戳,便于追溯对应版本
配合缓存清除机制,让备份真正可恢复
仅有文件备份不够,恢复后若 Nginx 仍返回旧缓存(尤其是 proxy_cache 或浏览器强缓存),用户看不到新内容。因此备份方案要预留“缓存联动”出口:
- 在备份脚本末尾加一句:
curl -X PURGE http://localhost/purge/ > /dev/null 2>&1(需已配置ngx_cache_purge) - 或在恢复流程中强制清空
proxy_cache_path目录,并重启 nginx(nginx -s reload即可,无需 restart) - 对 HTML 类资源,确保其缓存时间短(
expires 1m)、启用ETag,这样即使文件已恢复,用户刷新即可获取最新版











