目标
在不引发源站过载的前提下,用发布标签精确失效 CDN 缓存,分批替换内容,并从多个边缘节点确认新版本已经生效。
步骤
- 为本次发布的每个变更资源打上
release-2026-10-21标签,列出受影响的 HTML、入口 bundle、静态资源和接口响应。 - 评估源站容量,先用预热客户端通过 CDN 拉取入口资源,确认源站延迟正常且缓存条目已经建立。
- 按标签分批失效:先 HTML 和入口 bundle,再静态资源,最后媒体文件;每批等待缓存重新填充后再继续:
curl -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/purge_cache" \
-H "Authorization: Bearer $CF_TOKEN" \
-H "Content-Type: application/json" \
--data '{"tags":["release-2026-10-21"]}'
curl -sI https://www.example.com/app.js \
| grep -iE "cf-cache-status|age|etag|last-modified"
- 从至少三个边缘位置请求变更后的 URL,检查缓存状态、年龄和 ETag。
- 持续观察源站 5xx、延迟和带宽 30 分钟;若发布有问题,恢复上一版本产物并再次按相同标签失效。
验证
多个 POP 返回新 ETag 和新的缓存条目;CDN 命中率在预热后回到基线;源站 5xx 未超过错误预算;主要页面和接口返回的内容与发布产物一致。
回滚
缓存失效本身无法撤销,但内容可以重新发布:恢复上一版本产物后再次按同一标签失效即可。不要因为发布失败而“清空全部缓存”,这会把所有访客同时打向源站,是常见的自伤式故障;也不要提前删除上一版本产物,否则回滚窗口内无法恢复。如果 CDN 支持软失效,可对 HTML 使用软失效,让边缘在重新验证期间继续提供旧内容,避免完全不命中。