网站建设

张戈博客使用CloudFlare CDN加速的经验技巧分享

Jager · 6月2日 · 2019年 · · 7015次已读

我博客之前的文章提到了因更换了个性域名 zhang.ge 导致无法备案,因此服务器也不得不迁移到国外,这里也顺便分享一下,目前博客使用 AWS 的 lightsail,坐标东京,配置如图:

张戈博客使用CloudFlare CDN加速的经验技巧分享
图 1:我选择的是套餐三,另外挂了一个 20GB 云数据盘

大概 10 刀多一点每月,换算软妹币 80 左右,比国内的绝大部分香港或境外同等配置云服务器划算。如果选择前 2 个套餐会更便宜。

张戈博客使用CloudFlare CDN加速的经验技巧分享
图 2:近几个月的费用报告

不过,真正用过国外服务器的朋友都知道,受『功夫王』的影响,国外服务器一到傍晚就会抽搐不已。于是考虑套一层 CDN 来缓解下,而且也可能帮忙扛一扛恶意攻击什么的。

CloudFlare(后文简称 CF)是什么,怎么设置我这里就不赘述了,大家可以网上搜下 CF 的详细使用教程,有非常多的网友、博主分享了图文并茂的教程。下面主要是记录、分享一下张戈博客在使用 CF 中发现的一些经验或技巧,希望给在用或将要用 CF 的同学提供一些参考。

一、CNAME 接入方式

了解过 CF 的同学可能知道了,CF 免费套餐只能通过 NS 方式接入。这个方式用起来不够灵活、生效很慢,而且最重要的问题是没法在解析的时候手工解析到 CF 节点 IP 地址。

要实现 CF 的 CNAME 接入方式也很简单,这里使用第三方的 CF 管理平台即可,比如张戈博客使用的是:BNXB 。这类平台通过 CF 的 API 来操作域名,所以他们把 CF 的所有功能选项都本地化、中文化了,极大的降低了国内用户的使用门槛!当然,最吸引我的还是可以使用 CNAME 接入方式。

张戈博客使用CloudFlare CDN加速的经验技巧分享
图 3:BNXB 设置

接入很简单,注册平台账号并参考提示绑定 CF 的 API 账号,即可在平台进行接入操作。这里可以直接选择 CNAME 接入方式:

张戈博客使用CloudFlare CDN加速的经验技巧分享
图 4:CNAME 接入

如果觉得描述理解费劲,不知道怎么填写,其实也可以先选择 DNS 接入方式,然后在平台可以再次转换为 CNAME 方式。这个平台可以随时在 CNAME 和 DNS 接入方式之间互相转换:

张戈博客使用CloudFlare CDN加速的经验技巧分享
图 5:接入方式转换

接入完成后,我们可以参考网络上前人分享的一些经验,优化一下配置(都是中文的,这里我就不一一介绍了),平台会给出一个可用的 CNAME 记录:

张戈博客使用CloudFlare CDN加速的经验技巧分享
图 6:解析记录界面,CNAME 记录

这时候,我们就可以在原来的域名管理(比如 dnspod、万网等)那里,将之前的@或 WWW 记录解析到这个 cname,就完成了 CF 的接入了。

二、指定节点解析

如上文图 6 最后所示,接入 CF 之后,CF 会给域名分配一个入口 IP,一般是美西洛杉矶那边的。这个 IP 其实是采用的 AnyCast 技术,当用户访问到时候,会就近分配一个真实的节点 IP,以加快访问速度。所以,通过 ping 工具去探测出来的 IP 都只是 AnyCast 入口 IP,并不能展示真实的节点 IP 地址是多少。

不过,要查看真实节点 IP 的方法也很简单,CF 每一个节点都有一个 trace 接口,访问方式为:http://{节点 IP/域名}/cdn-cgi/trace。比如要查看张戈博客的真实节点地址,则访问 https://zhang.ge/cdn-cgi/trace

通过实测发现,目前国内用户访问默认还是会走美西节点,只有移动和教育网会走香港节点。因此国内用 CF 的效果仍然不够乐观。如此一来,就会有同学奇思妙想了,既然能找到真实节点,那是不是我可以固定解析到一些速度快的节点呢?比如香港节点。答案是肯定的!!

有了上面 CNAME 接入的前提条件,我们就可以在域名解析那里任意解析到节点 IP 了。反之,使用 NS 方式接入就不能这么任性了。

CF 的具体节点 IP 这里就不公布了,感兴趣的自己去谷歌、百度搜下看看。

这样一来,电信和联通 2 个大户,本来是走美西慢出翔,现在就可以走两个相对高速的节点了,速度得到极大提升!而默认线路使用 CF 默认分配的 AnyCast 入口 IP,一是移动运营商用户可以走香港线路,二是为了兜底。说到兜底,这里不得不再分享一个 dnspod 的使用技巧——D 监控:

张戈博客使用CloudFlare CDN加速的经验技巧分享
图 8:D 监控自动切换解析

如图所示,dnspod 的 D 监控功能,可以探测站点是否可用,若不可用可以自动切换到可用的 IP。所以在图 7,我给电信和联通都设置了 2 个 IP(免费套餐最多 2 个)。也就是说,当 D 监控发现手工指定的 CF 节点宕机,则可以自动切换到另外 2 个 IP(包括默认的 AnyCast IP),也就又多了一层保障:

张戈博客使用CloudFlare CDN加速的经验技巧分享

三、强制缓存配置

当我接入 CF 之后,我发现虽然我在 cache 等配置里面设置了缓存,实际上页面并没有缓存到 CDN 节点。最终,通过官网的帮助文档,发现 CF 默认并不会缓存 html 页面(文档地址),而需要设置自定义的 Page Rules,这个和百度云加速那个自定义规则其实一模一样!所以说,百度云加速其实就是『借鉴』CF 来设计的。

既然一模一样,因此可以参考我之前分享的百度云加速自定义规则设置来设置 CF 的 Page Rules 了,如图:

张戈博客使用CloudFlare CDN加速的经验技巧分享
图 10:page rules 设置

还是和百度云加速一样(或者说百度云加速和 CF 一样),免费套餐只能设置 3 条规则,因此不愿意花钱的我们也就只能如图设置了:除了后台和评论分页不缓存,其他一律缓存。如图所示,其中还有个最关键的地方,Edge Cache TTL这个选项必须要设置一下,否则依然不会缓存的哦!

虽然有些粗放,但是对于个人博客是可以接受的,除非有什么特殊页面也要求不缓存时,可能无法满足。当然,如果你确实需要更多规则,也可以花 5 刀/月额外购买 5 条:

张戈博客使用CloudFlare CDN加速的经验技巧分享
图 11:付费购买 Page Rules 条目

另外,我从 CF 帮助文档看到,Page Rules 其实是可以根据 cookies 来配置页面规则的,当时我没找到,应该是收费版本才有。就是不知道 5 刀购买的 5 条规则是否可用通过 cookie 实现更加灵活点配置。描述如下:

How do you specify cookie names for Bypass Cache Cookie or Cache on Cookie?
Note that Bypass Cache on Cookie is available only on Business and Enterprise plans & Cache on Cookie is Enterprise only.
You can specify multiple cookie names by using the OR “|” operator. For example, to match cookie1cookie2, or cookie3, you would write: cookie1|cookie2|cookie3. You can also use the wildcard “.*” operator, i.e. cookie1.*.

如果可以通过 cookie 来配置,那就非常强大了,比如官网给出的WordPress 专用配置

张戈博客使用CloudFlare CDN加速的经验技巧分享
图 12:CF 官方分享的 WordPress 专用 html 缓存页面配置

四、WordPress 插件

使用 CDN 之后,很多朋友可能会被缓存困扰,比如内容更新,前台却因 CDN 缓存死活看不到最新内容,可谓乐也缓存、烦也缓存。因此,每次我使用一个新的 CDN,都会写一些配套的缓存自动清理代码(我没用过的,自然也不会花时间去研究的啦~~),比如之前分享过:

这次,也不例外。而且 CF 明显有更加成熟的 API 接口,正打算开撸的时候,我发现了新大陆!其实 CF 有专用的 WordPress 插件,名称就叫 Cloudflare。我们只需要在后台插件界面搜索安装即可:

张戈博客使用CloudFlare CDN加速的经验技巧分享
图 13:搜索并安装 CloudFlare 插件

安装后,在插件设置界面登陆 CF 账号,就可以得到一个简易版的 CF 控制后台了:

张戈博客使用CloudFlare CDN加速的经验技巧分享
图 14:Cloudflare 插件设置
张戈博客使用CloudFlare CDN加速的经验技巧分享
图 15:Cloudflare 后台数据统计

当然,这些功能我们在官方或者第三方平台都能配置,只能说是锦上添花。而我们最关注的功能其实是再更新内容时能自动删除 CDN 缓存,插件是否支持?答案是肯定的!

张戈博客使用CloudFlare CDN加速的经验技巧分享
图 16:自动更新缓存设置

如此一来,我就不用撸代码,你们也就不用折腾代码啦!真的爽歪歪!

五、敬请期待...

暂时就想到这么多,后续如果发现更多实用的 CF 配置技巧,我再继续更新到本文,敬请收藏关注!

76 条回应
  1. aunsen 2020-6-11 · 21:29

    我的cc域名好像也不能备案,用的香港主机少了许多折腾,PS:你还是那么爱折腾啊

    • user 2020-7-27 · 1:28

      cc现在已经运行北岸了

  2. 爱笑啦 2020-8-16 · 16:45

    前来观摩学习一下,一直不知道怎么设置CDN

  3. loop 2020-8-17 · 17:25

    博主,namesilo无法添加裸域名的CNAME记录

  4. raymond 2020-10-5 · 23:11

    请问楼主你可以帮我做这个自选节点吗?我在互站找了好久都没有人会做。企鹅:1423037六四五

  5. 佛系软件 2021-3-27 · 1:57

    防火墙规则怎么弄啊

  6. 佛系软件 2021-3-28 · 16:58

    我的为什么有3个ip啊,两个cdn,一个源站,D监控我设置不做修改

  7. 天空游戏 2021-4-1 · 18:59

    cf不是大陆速度不行吗,还可以进行改进吗,

  8. leo 2021-6-24 · 6:49

    既然用外面的vps,何不试试免费的甲骨文,比你这个配置好几倍。我一直撸的免费。

  9. leo 2021-6-24 · 6:52

    博主能说下是什么主题吗? 和我的好像,不知道是不是同一个人的

  10. 佛系软件 2021-6-25 · 11:58

    为什么我之前添加cdn后可以全部覆盖源站ip,现在删除重新添加后还是有十几个节点没有覆盖呢