安装包从 3.1 更新到 3.2,下载下来的还是 3.1,文件大小和 md5 都没变,直接访问源站却是新版,CDN 缓存 TTL 设的是三十天。乍看像缓存或者权限的锅,追下去往往不是。

# 文件名带版本,天然绕开旧缓存
download/app-3.2.0.zip
curl -X POST https://cdn.api/purge -d '{"urls":["/download/app-3.2.0.zip"]}'

追下去是这么回事:下载地址用的是固定文件名,CDN 按 URL 缓存,内容换了 URL 没换。刷新缓存只清了首页,没覆盖文件路径。

「CDN 缓存刷新」这类改动最怕改一半,回滚脚本先准备好,再动生产。测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。

线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。

权限不要一口气开到最大,先加到够用再往上试,范围小才好收。

具体做法是,文件名带版本号,新版本换新地址,旧地址保留一段时间;发布流程里加一步 CDN 刷新,把文件路径一起提交;下载后比对 md5,与发布清单里的值一致才算成功。

验收就看一点,新版本发布后立即能下到 3.2,md5 与发布清单一致。

作者 9823189