长期以来很多 WordPress 站长们都以为 WordPress 这样的动态博客网站系统的 CDN 缓存效果是有限的,尤其是 WordPress 伪静态后的.html 是无法被 CDN 完美缓存的。其实这个是跟你的博客网站架构有关系,如果你的 WordPress 网站用的是单用户模式(就是只需要网站管理员登录,不需要前端访客注册登录!),是完全可以借助CloudFlare灵活的缓存规则来完美缓存的,那就是区分登录和未登录状态的精确缓存规则。这里提到的单用户模式其实就是一种标准普通的 WordPress 博客站点,今天明月就给大家分享一个CloudFlare里标准普通的 WordPress 博客站点智能区分登录和非登录状态自动缓存与否的缓存规则。
CDN 缓存的好处主要是体现在访客浏览体验上的,也就是大家常说的网页载入速度。不像 WordPress 插件(如:WP Super Cache 等)、PHP 扩展(如:Memcached、Redis 等)、Nginx 缓存等等这些都是相对于服务器后端的缓存加速,所以一个完美的 CDN 缓存规则方案对于博客站点的速度优化是最直观的。尤其是像 CloudFlare 这样以安全防御为主的 CDN,配合一个完美的缓存规则那就真的是“鱼与熊掌可兼得”了!
今天分享的这个缓存规则相对来说要复杂一些,需要创建至少三条【Cache Rules】,并且还要注意三条【Cache Rules】的顺序才能有效,为了方便大家使用,每条规则判断条件明月都会提供 CloudFlare 规则表达式,大家只需要复制粘贴到【表达式生成器】里即可自动生成规则判断条件了,唯一需要的就是修改判断条件里的域名yourdomain.com为你自己站点的域名即可。
三条规则的原理是:固定的链接都绕过缓存、登录和发表了评论的访客绕过缓存、除了上述两个情况的一律强制缓存。说白了就是正常的访客一律通过 CDN 缓存查看网站,只有登录和发表过评论的回源请求获取实时数据。其中登录和发表评论的状态是通过 cookie 来判断的。下面我们开始创建规则:
进入 CloudFlare 后台【缓存】——【Cache Rules】——创建规则:
第一条规则(不缓存目录链接)
规则名称:A 不缓存目录链接
当传入请求匹配时:
表达式:
(http.request.full_uri eq "https://yourdomain.com/wp-admin/*") or (http.request.full_uri eq "https://yourdomain.com/*preview=true*") or (http.request.full_uri eq "https://yourdomain.com/?s=*")
注意替换表达式里的域名为自己站点的域名哦!
第二条规则(登录评论不缓存)
规则名称:B 登录评论不缓存
当传入请求匹配时:
表达式:
(starts_with(http.request.full_uri, "https://yourdomain.com/") and http.cookie contains "wordpress_sec_") or (starts_with(http.request.full_uri, "https://https://yourdomain.com/") and http.cookie contains "wordpress_logged_in") or (starts_with(http.request.full_uri, "https://https://yourdomain.com/") and http.cookie contains "comment_")
注意替换表达式里的域名为自己站点的域名哦!
上述两个规则都是绕过缓存的,所以下面都统一如下图所示设置并保存规则:
第三条规则(缓存)
规则名称:C 缓存
当传入请求匹配时:
表达式:
(starts_with(http.request.full_uri, "https://yourdomain.com/") and not http.cookie contains "wordpress_sec_" and not http.cookie contains "wordpress_logged_in" and not http.cookie contains "comment_")
注意替换表达式里的域名为自己站点的域名哦!
因为这个规则是唯一一个需要缓存的,所以可以参考如下图所示的缓存规则配置:
这里的边缘 TTL 指的是 CDN 节点服务器上的缓存,缓存时间可以久一些,大家根据自己站点修改频率设置就是了。
这里的浏览器 TTL 指的是在客户浏览器里保留的站点缓存,同样的,大家根据自己站点修改频率设置就是了,要注意的是浏览器缓存因为是保存在客户端的,我们是无法来清除更新的,所以这里不建议设置过长的缓存时间,否则会造成客户访问网站无法获取最新更新的问题,如上图所示是 2 个小时的浏览器本地缓存,过期后会自动请求 CloudFlare 节点数据更新的。
其他的设置大家参考上面的勾选开启即可,最后保存规则!
至此三条规则已经创建成功,我们会在 CloudFlare 后台【缓存】——【Cache Rules】里看到这三个规则的列表,首选确保每个规则都是开启状态,然后一定要按照规则名称顺序排列,如下图所示:
调整规则顺序只需要长按最左边的竖排六个点如上图箭头所指上下拖动即可,按照 A、B、C 的顺序先后排列即可。
最后记得要在【缓存】——【配置】里【清除所有内容】一下,让缓存规则生效。
理论上只要你的 WordPress 使用的主题是单用户模式的,上述三个缓存规则就能很好的运行并智能判断来缓存与否,可以大大的提升访客首次载入网页的速度,明月实测速度得分都在 90 分以上的哦!
当然,这三个缓存规则仅限于在标准普通的单用户模式 WordPress 博客站点上使用,如果你用了多用户支持的 WordPress 主题、插件就不适用了,那需要大量的调试整理分析定制专属缓存规则的,这点儿一定要搞清楚,并且不是所有多用户的主题、插件可以实现 CDN 智能缓存规则的,不清楚的可以留言咨询明月或者加微信让明月帮你判断分析一下。

关注明月【云服务技术咨询】公众号,免登录/免费阅读
声明:本文为原创文章,版权归明月登楼的博客所有,欢迎分享本文,转载请保留出处!



















我想问下“规则名称:B 登录评论不缓存” 为什么要填“https://https://”两个协议头呢?还是写错了写成两个了
@Anky回答正确,写错了,写成两个了!
@Anky截图忘了去掉了 ,以下面的表达式为准就是了!多谢提醒!
大佬,再请教下,规则 B 是 2 个 https 在一起用噶?“"https://https://yourdomain.com/")”
@xiaoniao这取决于你需要过滤几个 cookie!我得主题是需要三个 cookie,不同主题 cookie 是不一样的!
@明月登楼我是知更鸟的 begin 主题
@xiaoniao这个只能你自己通过浏览器开发者工具调试来获得了!
@明月登楼好的,先去研究下,谢谢。
感谢大佬分享,正好需要,谢谢。
@xiaoniao主要要跟主题结合着用哈,尤其是国内多用户主题,最起码要知道主题使用的 cookie 有哪些!
@明月登楼大佬回复得真快,请问下用了这 3 条“缓存规则”,之前用的“页面规则”就可以删除了吧?
@xiaoniao呵呵,正好在电脑跟前,是的,理论上可以删除其他缓存规则和页面规则了,主要是怕冲突,另外页面规则 CloudFlare 也即将停用的!
@明月登楼大佬,再请问下你另外一篇文章里写的“要注意的是【页面规则】里要根据具体规则目的分别在 CloudFlare 后台——【缓存】——【Cache Rules】和【规则】——【Configuration Rules】或者【重定向规则】里重新创建。”不太明白要怎么设置,是不是【缓存规则】和【页面规则】两个地方都要进行设置?请指教,谢谢。
@xiaoniao这个现在已经不适用了,因为 CloudFlare 已经要放弃【页面规则】了,所以现在起缓存规则只需要在【Cache Rules】创建即可。重定向的在【重定向规则】创建!
@明月登楼好的,非常感谢大佬的耐心解答!