缓存和 CDN 配置正确时,大部分访问根本不需要源站参与;配置错误时,要么命中率低、加速效果不明显,要么把登录状态、购物车内容缓存给了别人。下面先给出一套可以直接执行的检查步骤,再说明缓存分层的思路和常见的踩坑点。
缓存与 CDN 排查:按这 7 步执行
- 逐类查看命中状态。分别对 HTML、CSS/JS、图片执行
curl -sI,查看cf-cache-status、X-Cache、Age等响应头。静态资源应当稳定命中;HTML 是否命中,取决于你有没有为 HTML 配置边缘缓存。 - 拆开测边缘与源站。用
curl --resolve 你的域名:443:源站IP https://你的域名/直连源站,对比首字节时间。直连就慢是源站问题;直连快而经过 CDN 慢,是回源链路或命中率问题。 - 检查源站缓存头。确认静态资源有长期的
Cache-Control,HTML 的Cache-Control与Set-Cookie不会意外阻止缓存,并找出是哪个插件给所有页面都设置了 Cookie。 - 整理缓存键与排除规则。忽略 utm、gclid 等营销参数;排除 /wp-admin/、登录页、预览链接、购物车、结账和我的账户;带登录或购物车 Cookie 的请求一律绕过缓存。
- 接好清理机制。发布、更新、删除内容时,自动清理相关 URL 的源站缓存与 CDN 缓存。实际测试一次「修改标题 → 前台刷新」,确认新内容能及时出现。
- 验证对象缓存。启用 Redis 后,用
wp cache type或插件状态页确认对象缓存真正在工作,并观察内存占用与淘汰情况。 - 按天复盘。在 CDN 控制台查看命中率与回源流量,对照发布记录和清理记录,判断规则调整是否有效。
回源慢的完整排查见 CDN 回源慢怎么排查;如果直连源站首字节就高,见 WordPress TTFB 高怎么排查。
缓存该怎么分层
页面缓存
全页或分片缓存,显著降低 PHP 与数据库压力,适合内容与营销页。
对象缓存
把重复查询与 transient 放进 Redis,稳住高并发与后台任务。
CDN 与回源
静态资源与可缓存 HTML 就近分发,配合正确的 Cache-Control 与清理钩子。
有效的加速是分层的:浏览器缓存、CDN 边缘缓存、源站页面缓存、对象缓存(Redis/Memcached),以及数据库与 PHP OPcache。缺少任何一层,压力都会被打回源站。
每一层分别解决什么问题
- 浏览器缓存:让回访用户不必重复下载 CSS、JS、图片和字体,依靠长期的 Cache-Control 与带版本号的文件地址;
- CDN 边缘缓存:让访客从就近节点获取内容,缩短网络距离;HTML 能否在边缘命中,是决定首字节时间的关键;
- 源站页面缓存:CDN 未命中时,源站直接返回已生成的页面,不必每次都执行 PHP;
- 对象缓存:针对无法整页缓存的请求(后台、登录用户、购物车、接口),减少重复的数据库查询;
- OPcache:缓存编译后的 PHP 代码,几乎所有站点都应该开启。
WpWork 帮助你选型缓存插件组合、设计缓存键与排除规则,并处理登录态、购物车、多语言与表单等「不能乱缓存」的路径。
改规则前先做好记录
缓存规则一旦改错,影响的是所有访客,而且问题往往要等缓存过期后才暴露。每次调整 CDN 或缓存插件规则前,先导出或截图现有配置,写明这次要改什么、预期效果是什么;改完后用无痕窗口、登录状态和不同地区的节点分别验证,并观察一段时间的命中率与错误率。发现异常时按记录回退,比凭记忆恢复可靠得多。
常见踩坑
缓存了购物车与结账页、多语言页面没有按语言区分缓存、清理钩子没有接到发布事件、CDN 与源站重复压缩,这些都会表现为「有时快、有时错」。另外几个高频问题:多个缓存插件同时启用,规则互相覆盖;CDN 缓存了 404 或报错页面,修复后前台依旧报错;源站防火墙把 CDN 节点当作攻击来源限流,导致间歇性变慢。排查时先按上面的步骤确认每一层的实际行为,再决定改哪一层的规则。
国内与海外访问如何取舍
访客主要在国内时,源站与 CDN 节点都放在境内通常最稳定,但需要提前完成备案;访客主要在海外时,源站应靠近主要市场,再用 CDN 覆盖其他地区。访客同时分布在国内和海外的站点,最容易出现「一边快、一边慢」:常见做法是按地区分别评估回源路径,必要时启用分层缓存,让边缘节点先向中间层取内容,减少跨境回源的次数。无论选哪种方案,都要用不同地区的测试节点分别测量首字节时间,而不是只在办公室网络下测一次就下结论。
延伸阅读(已开放索引)
- CDN 回源慢怎么排查
- WordPress TTFB 高怎么排查
- 缓存与性能插件组合
- 插件性能与 CWV 治理
- 缓存性能排障手册:性能与 CWV 治理
- 对象缓存 Redis 是什么:性能与 CWV 治理
- 对象缓存 Redis 实践清单
- Core Web Vitals 实践清单
- 技术标签索引 /tech/
常见问题
CDN 和页面缓存插件是不是重复?
不重复。插件在源站生成可缓存的响应,CDN 负责边缘分发与就近访问。二者的规则需要对齐,否则会出现脏缓存。
WooCommerce 能上全站缓存吗?
目录页和内容页可以缓存,但购物车、结账、我的账户必须排除或做分片处理,我们按路径白名单落地。
如何验证缓存命中?
通过响应头、CDN 边缘日志和多次测量对比命中率与首字节时间,而不是只看「感觉变快了」。
清理缓存后为什么会短时间变慢?
清理后的第一批请求都需要回源重新生成,属于正常现象。可以只清理与变更相关的 URL,或在发布后预热重要页面。
下一步:如果命中率一直上不去,或者不确定哪些路径可以安全缓存,可以 申请 WpWork 免费诊断,我们会按路径列出缓存与排除建议。
