索引
cloudflare 作为一款功能强大的免费 cdn 服务,受到众多 wordpress 站长的青睐,大家都希望借助它提升网站的加载速度。然而,如果将 Cloudflare 配置为缓存整个站点内容(HIT),可能会导致 WordPress 登录和评论功能异常,比如前端页面无法及时更新,甚至缓存了其他用户的登录状态。因此,大多数 WordPress 站点通常仅利用 cdn 缓存 JavaScript、CSS 以及图片等静态资源。
部分细心的站长可能已经注意到,Cloudflare 提供了一项“缓存 WordPress/WooCommerce 静态 HTML”功能,不过该功能仅适用于 Cloudflare Business 和 Enterprise 计划用户,免费版并不具备此特性。
利用 Cache Rules 设置 Bypass Cache on Cookie
通过这个功能,可以实现以下优化:
- 未登录访客(无登录 Cookie)访问网站时,Cloudflare 直接提供完全缓存的页面(HIT),无需回源,从而加快加载速度并减少服务器压力。
- 已登录用户或已评论用户(具有登录 Cookie)时,Cloudflare 自动回源提供动态内容(DYNAMIC),确保页面内容实时更新。
- 两者的缓存相互隔离,避免未登录访客看到已登录用户的前台信息,确保数据安全性。
大多数网站(包括 WordPress)都依赖 Cookie 来识别用户的登录状态或评论行为。因此,我们可以利用 Cloudflare 根据 Cookie 判断用户状态,智能区分是否回源。这样不仅能提升访问体验,还能有效减少服务器负载,甚至降低能耗,可谓一举多得。
接下来,以 WordPress 为例,介绍如何免费实现这一功能。
Cookie 特征
每个CMS的Cookie特征都会不一样,WordPress的cookie特征,我们可以从浏览器去查看:
以下两个是100%一定会有的特征:
wordpress_logged_in_*
wordpress_sec_*
缓存规则
在确定好Cookie特征之后,我们可以开始进行CDN缓存规则的配置。
首先是配置WordPress后台的相关页面,必须将WordPress后台「绕过缓存」,也就是 bypass cache。
(http.request.full_uri eq "https://您的域名/wp-admin/*") or (http.request.full_uri eq "https://您的域名/*preview=true*") or (http.request.full_uri eq "https://您的域名/前台用户中心/*") or (http.request.full_uri eq "https://您的域名/?s=*")
第二个缓存规则是针对已登录的用户绕过缓存:
(starts_with(http.request.full_uri, "https://您的域名/") and http.cookie contains "wordpress_sec_") or (starts_with(http.request.full_uri, "https://您的域名/") and http.cookie contains "wordpress_logged_in") or (starts_with(http.request.full_uri, "https://您的域名/") and http.cookie contains "comment_")
第三个缓存规则是针对未登录的访客,直接提供缓存页面:
(starts_with(http.request.full_uri, "https://你的域名/") and not http.cookie contains "wordpress_sec_" and not http.cookie contains "wordpress_logged_in" and not http.cookie contains "comment_")
边缘TTL跟浏览器TTL可以各别设置,主要是根据你自身需求来配置缓存持续时间,举例来说如果是首页比较频繁有更新内容,可以设置2小时,如果你的首页内容不常更新,可以设置久一点,浏览器TTL在Cloudflare有预设值,这边可以自定义覆盖预设值

Cloudflare 的通用浏览器缓存 TTL,如果在 cache rules 没有自定义浏览器TTL的情况之下,会优先以这边来进行缓存
检查自己缓存配置规则的顺序,可以自由调整顺序,越前面的优先层级越高。
验证缓存
Cloudflare有个工具叫做「跟踪」,可以模拟用户去访问你设置缓存规则的页面是否有被正确缓存。

Cloudflare Trace Tool
页面规则有正确被缓存会显示绿色的文字
然后我们可以用第三方测速平台来检验我们设置的缓存规则是否有成功:
cf-cache-status: HIT
表示有成功缓存到页面