WordPress 缓存插件与 CDN 冲突通常源于双重缓存导致的内容更新延迟或静态资源加载失败。优化设置的核心是明确分工:插件负责生成页缓存,CDN 负责分发静态资源,并通过 API 联动实现缓存清除。
先说结论:解决冲突的关键在于避免同一资源被两层缓存同时锁定,并确保内容更新时能同步清除 CDN 边缘节点缓存。
- 适合:使用 Cloudflare、KeyCDN 等反向代理 CDN 且安装了 WP Rocket、W3 Total Cache 或 LiteSpeed Cache 的站点
- 先准备:获取 CDN API 密钥,确认域名 DNS 已解析至 CDN,备份当前缓存配置
- 验收:更新文章后 CDN 返回最新内容,静态资源加载无混合内容报错,后台访问不受缓存影响
快速处理思路
若出现页面更新不生效或样式错乱,优先检查 CDN 缓存层级设置,并在缓存插件中启用 CDN 清除 API。不要同时开启插件的 HTML 缓存和 CDN 的 HTML 缓存,建议保留插件的 HTML 缓存,CDN 仅缓存静态资源。
为什么会这样
冲突本质是缓存层级重叠导致的内容不一致。源站插件生成静态 HTML 后,CDN 再次缓存该 HTML,当源站内容更新时,若未触发 CDN 清除,用户仍访问到旧版本。
此外,Cookie 传递和 HTTPS 配置不当会导致 CDN 误缓存动态页面(如购物车),或导致静态资源因协议不匹配无法加载。
分步处理
步骤 1:调整 CDN 缓存层级
登录 CDN 控制台,将 HTML 文件的缓存策略设置为不缓存或短时效。例如 Cloudflare 中设置 Page Rules,对/*html 设置 Cache Level: Bypass。
步骤 2:配置插件 CDN 选项
在缓存插件设置中找到 CDN 选项卡,填入 CDN 提供的 CNAME 地址。启用 Replace site URL with CDN URL 功能,确保静态资源请求指向 CDN 域名。
步骤 3:绑定清除 API
在插件设置中输入 CDN API Key 和 Zone ID。启用 Update Content 时 Purge CDN Cache 选项,确保发布文章时自动触发清除。
步骤 4:排除动态内容
在 CDN 和插件中分别设置排除规则,对/wp-admin/、/cart/、/checkout/ 等路径禁止缓存,避免用户数据错乱。
怎么验证是否生效
使用浏览器开发者工具 Network 面板,检查静态资源响应头中的 CF-Cache-Status 或 X-Cache 字段。 HIT 表示命中缓存,MISS 表示回源。
更新一篇测试文章,立即访问前台页面,查看内容是否同步更新。若未更新,手动触发插件的 Purge All 按钮并再次验证。
常见坑
登录用户缓存:部分插件默认缓存登录用户页面,需确保 CDN 和插件均设置不缓存带 Cookie 的请求。
CSS/JS 断裂:更换 CDN 域名后,若未更新资源链接,会导致样式丢失。务必检查页面源码中资源 URL 是否已替换。
HTTPS 混合内容:若源站是 HTTPS 而 CDN 资源是 HTTP,浏览器会拦截资源。确保 CDN 回源策略和 SSL 模式设置为 Full 或 Strict。
常见问题
CDN 缓存清除 API 配置后仍不生效?
检查 API 密钥权限是否包含 Cache Purge 权限,并确认防火墙未拦截插件发出的清除请求。
开启 CDN 后网站访问变慢?
可能是 CDN 节点距离用户过远或回源链路拥堵,尝试切换 CDN 服务商或调整 DNS 解析线路。
移动端和 PC 端缓存内容不一致?
检查插件是否开启了 Separate cache files for mobile devices,并在 CDN 中配置按 User-Agent 缓存。