为 WordPress 网站接入 Cloudflare 是提升网站速度和安全性的常现操作。但在实际配置中,很多站长会遇到“CDN 缓存不生效”的问题;而一旦强行开启全站缓存,又极易引发“普通访客看到管理员工具栏”的严重安全隐患。
本文将通过一次真实的排障经历,带你从零开始完美配置 WordPress 的 Cloudflare 缓存规则。
避坑前提:基础 DNS 与邮件解析设置
在开始优化缓存前,请确保你的基础 DNS 记录设置正确。这里最容易犯的错误是邮件记录被代理:
- 网站解析(A / CNAME 记录): 根域名和
www必须开启 Proxied(橙色小云朵),否则流量不会经过 Cloudflare,一切 CDN 缓存和 WAF 防护都无从谈起。 - 邮件解析(MX / TXT / DKIM 记录): 凡是与邮件相关的记录(如
mail、hostingermail-a._domainkey等),必须设置为 DNS Only(灰色小云朵)。如果开启代理,会导致发出的邮件被判定为垃圾邮件或直接退信。
现象一:网站接入了 Cloudflare,但依然没有缓存?
如果你在浏览器控制台(F12 -> Network)查看当前网页的 Response Headers,发现 CF-Cache-Status 标签缺失,或者 Cache-Control 显示为 no-cache,说明你的网站并没有真正利用到 CDN 节点。
排查与解决步骤:
- 关闭开发模式: 前往 Cloudflare 后台 Overview(概览),确保右下角的 Development Mode(开发模式) 处于关闭状态。
- 强制覆盖源站指令: WordPress 默认或某些插件会发出
Cache-Control: no-cache指令,导致 Cloudflare 乖乖听话不缓存。我们需要利用 Cache Rules(缓存规则) 强行接管。
现象二:开启全站缓存后,未登录访客竟然看到了后台 Toolbar!🚨
为了解决上述不缓存的问题,很多站长会直接设置一条 Cache Everything(缓存所有内容)的规则。 这是一个致命的操作!
由于 Cloudflare 缓存了你在登录状态下访问的页面,随后将这个带有顶部管理员 Toolbar(工具栏)的页面分发给了全球所有未登录的普通访客。这不仅会让访客感到困惑,还可能泄露网站的后台结构。
终极方案:完美版 WordPress Cache Rules 配置
为了既享受全站 CDN 极速缓存,又避免后台功能混乱和缓存污染,我们需要通过“自定义表达式”来精准排除动态请求。
步骤 1:紧急清理错误缓存
如果你已经踩了上述的坑,请立刻前往 Cloudflare 左侧菜单:Caching(缓存) -> Configuration(配置),点击 Purge Everything(清除一切),销毁所有已被污染的节点缓存。
步骤 2:创建精准的缓存规则
前往 Caching -> Cache Rules,点击 Create rule。
- Rule name(规则名称): 填写
WP Force Cache Safe(或任意名称)。 - When incoming requests match(匹配条件): 选择 Custom filter expression(自定义筛选表达式)。
- 点击 Edit expression 切换到代码编辑模式,并粘贴以下防雷代码:
(not http.request.uri.path contains "/wp-admin/" and not http.request.uri.path contains "wp-login.php" and not http.cookie contains "wordpress_logged_in")
(这段代码的意义:只要请求路径不是后台、不是登录页,且访客浏览器没有“已登录”的 Cookie,才执行缓存。)
步骤 3:设置缓存行为 (Then the settings are)
- 找到 Edge TTL:选择 Ignore cache-control header and use this TTL(忽略源站 cache-control 并使用此 TTL),时间建议设置为
2 hours或更长。 - 找到 Browser TTL(可选):选择 Override origin and use this TTL,时间保持一致。
- 滚动到底部,点击 Deploy(部署/保存)。
如何验证是否生效?
设置完成后,使用浏览器的 无痕模式 (Incognito) 访问你的网站首页。 按 F12 打开开发者工具,在 Network(网络) 面板中点击第一条 HTML 文档请求,查看 Response Headers:
- 寻找
CF-Cache-Status。 - 第一次刷新可能显示
MISS(节点正在去源站抓取)。 - 再次刷新,如果显示
HIT,恭喜你,你的 WordPress 网站已经成功跑在 Cloudflare 的全球 CDN 高速公路上了!
(注:由于 Cloudflare 节点遍布全球,不同地区首次访问可能仍是 MISS,只要有人访问过一次,该地区的后续访问都会是 HIT。)