Cloudflare有着免费且极其强大的服务,其中免费套餐的实际价值甚至比国内大部分云厂商的顶级套餐还要贵上不少。然而由于我国互联网的封闭性,导致托管在Cloudflare上的网站体验堪忧,让大多数站长想用却不敢用。
目前国内的站长们,基本上都是在受到攻击后手动切换到Cloudflare,平时则是使用一些国内的CDN。不过问题也显而易见:一是不能在攻击发生时第一时间采取行动,且因DNS缓存问题,往往攻击结束了保护还没完全生效;二是启用保护后就意味着合法流量也要经过Cloudflare,影响正常用户体验;三是免费套餐域名的DNS必须托管在Cloudflare,国内解析速度不好,灵活性也不够。
综上来看解决方案就十分简单了:分流——境外地区的流量引导至Cloudflare,境内地区则使用国内的CDN。这样做的好处有两点:对境外来说,Cloudflare的速度和性能绝对是数一数二的,比全局使用国内CDN要强得多;另外攻击流量一般也是来自境外,把防御工作交给专业的Cloudflare来做肯定是个不错的选择,且全程不需要站长去手动操作,第一时间就可以缓解攻击。
操作也很简单,国内的DNS云解析基本上都有分线路解析的功能,海外地区解析返回Cloudflare的地址,境内返回国内CDN地址就可以了。因此整个方案就只剩下一件事需要去做:在免(bai)费(piao)的情况下获得Cloudflare的CNAME接入地址。
早期大多数站长都是通过Cloudflare Partner的方式获取CNAME地址进行接入的,不过这个方法在后来Cloudflare限制Partner通过API新增域名的时候便失效了(因为Partner通过API接入域名时不需要进行所有权验证,可能会造成滥用)。因此我们可以通过另外一种方式:Cloudflare for SaaS
设置方法
首先,需要为自己的Cloudflare账户绑定一种可用的付款方式(PayPal、银联、Visa、MasterCard都支持)。这项功能提供100个域名的免费额度,也就是说只有接入100个以上的域名才会产生费用,因此放心绑定就可以了,不用担心产生意外的费用,毕竟个人网站想接入100个以上的域名似乎不太可能()
然后,按照常规流程将一个域名添加到Cloudflare。注意这个域名不能是网站用来正常访问的域名,必须是另外一个域名,且这个域名必须规规矩矩地用普通NS的方式接入。添加域名的流程这里就不再赘述了(有手就行)。
接下来,转到DNS->记录
添加一个A类型的记录,主机头自己随意起,但是不要忘记,下一步会用到。IP地址就填写源服务器的地址,注意代理状态必须要打开。如果你的服务器只支持IPv6的话,那就添加AAAA类型的记录,以此类推。不过尽量选用IPv4,否则可能会出现一些意外的不稳定因素。
完成后,转到SSL/TLS下的“自定义主机名”,位置如下图所示。
首次使用需要确认激活,没有绑定支付方式的话无法使用,一定要先绑定支付方式再做这一步。正常启用后,应该能看到类似的界面:
接下来,在“回退源”的文本框里,输入刚才添加的域名,注意是完整域名,不是主机头也不是源站IP地址。编辑完成后点击“添加回退源”提交,此时回退源状态会变成“正在初始化”。等待几秒钟后点击“刷新”,如果状态变成“有效”就说明回退源添加成功。
接下来,点击卡片右上方的“添加自定义主机名”按钮。
- “自定义主机名”文本框中填写正常访问时的网站域名
- “最低TLS版本”默认是1.0,不过建议选择1.1或1.2,因为1.0版本有比较大的缺陷
- “证书类型”保持默认的“由Cloudflare提供”即可,平台会自动进行证书的验证颁发以及到期续签(自定义证书只有Enterprise版本才能用,想用也用不起)
- “证书验证方法”建议选择“HTTP验证”,比较省事;如果选择了“TXT验证”接下来还需要一步额外的操作。两者最终颁发及续签证书的效果都一样,看个人喜好
确认无误后点击“添加自定义主机名”即可。添加完成后,会提示用户添加相应的的解析记录,如下图所示。
可以看到,Cloudflare给出了一个“主机名预验证TXT”,这项操作是用来验证用户是否有被添加域名的DNS解析控制权。根据我的实际测试,这步验证其实是可以直接忽略不做的,直接进行下一步的CNAME解析即可(因为用户通过CNAME记录指向回退源的操作本身,就已经证明了用户有该域的DNS控制权,因此如果直接进行CNAME解析,Cloudflare就会默认这一步已经完成并不再提示,懒人成就+1)。
CNAME的解析地址Cloudflare并没有明确说明,实际上只需解析到回退源的域名即可。完成后等待一段时间,再点击右侧的刷新,就可以看到配置成功了。
DCV委派
在“自定义主机名”这个区域中,下方还有一个名为“自定义主机名的DCV委派”的卡片。
图片中官方的解释有点拗口,不妨简单说明一下。“DCV委派”的作用就是帮助用户实现使用TXT验证的SSL证书的自动颁发与续签。通常情况下,使用TXT记录验证域名所有权从而颁发SSL证书的关键一步,都是根据CA机构的指示添加一个TXT记录。
然而这个TXT记录并不是一成不变的,哪怕是同一个域名,在颁发新的证书时,TXT验证的记录值都不会一样;但CA机构进行TXT记录值验证时,使用的主机名却是一样的。借助这一点,Cloudflare给用户生成了一个专属的CNAME地址,这个地址由Cloudflare进行自动管理,当要给用户颁发新证书时,这个地址的TXT记录值便会变成CA机构要求验证的记录值。因此用户只需要将CA机构用于验证的主机名CNAME到Cloudflare管理的地址,就可以实现TXT记录值自动变更,从而实现证书的自动颁发与续签。
啰嗦了这么多,有一点不难看出:DCV委派功能仅适用于TXT验证方式的SSL证书。因此如果你像我一样,在添加自定义主机名时选择了HTTP验证方式,那么恭喜你,这一步你可以直接省略掉,懒人成就+1
举个例子,假如我添加的自定义主机名是www.baiwulin.com
,Cloudflare分配给我的DCV委派地址是example.dcv.cloudflare.com
。那么我就需要去DNS解析控制台,给_acme-challenge.www.baiwulin.com
添加一个值为www.baiwulin.com.example.dcv.cloudflare.com
的CNAME解析记录。
添加完成后就可以实现证书的自动颁发以及日后的到期自动续签。这个解析记录不能删除(除非你不再使用该功能),否则会导致后续的SSL证书自动续签失败。
后记
这种CNAME的接入方式其实也有缺点,比如除了访问用的域名,还需要额外准备一个域名用作接入Cloudflared的Zone,不过随便购买个特别便宜的域名就行了。另外这种方案也不适合多个服务器跑不同网站的使用场景,因为每个Zone只能有一个回退源(为不同的主机名指定不同的回退源只在Enterprise版本可用),因此如果有需要,就必须再买一个或更多个域名。
其实网上已经有使用Cloudflare for SaaS的功能实现CNAME接入的教程了。之所以我还要再总结一遍,是因为网上的大多数教程要么不够详细,让人看完之后还是云里雾里的一脸懵;要么没有配图,中间的一些注意事项也没有写,容易踩坑(毕竟Cloudflare控制台本来就是英语,翻译成中文后难免有一些令国内用户不习惯的地方)。
就这样吧(水文完成),有遗漏之处欢迎指正。
4 条评论
写的很详细
感谢阅读!
导航网站很不错,互换个链接吧,我已经申请了
前排!终于逮到博主了
不过怎么最近更新的这么快,以前都是将近一个月一篇(doge)
这个其实很早之前就想写了,只不过因为太懒了一直拖着没弄,今天跟着上一篇博文一块整理了一下发出来了