阿里云使用CloudFlare来做cname接入

Cloudflare正常情况下是不支持cname方式接入的,接入cloudflare时,我一直以为只能将dns改成cloudflare的DNS才能正常使用,其实CloudFlare提供了CloudFlare for SaaS(Software-as-a-Service)的一个接入方式,我折腾了3个小时,原因就在于网上我查到的资料有些描述太不正确,例如阿里云解析中,如果设置了txt的websocket.ruteraliyun.com的解析后,就无法再设置websocket.ruteraliyun.com的cname解析,这tm真的有点坑的,所以这次就写一篇阿里云域名在不更改DNS情况下,使用CloudFlare进行代理并解析。

(English version translate by GPT-3.5)

前言

国内其实也有不少CDN服务提供商,收费的就不说了,我穷狗,免费的像 百度云加速 啊,还有 知道创宇 - 加速乐 等几个提供免费CDN加速的服务商(都要实名好像),但是前者百度的近期支持https,但是很可惜不支持websocket,后面的加速乐好像支持websocket,但是不支持https都什么年代了还不支持,所以我只能转战国外大厂,世界著名的CloudFlare CDN了(虽然3周前CloudFlare中断事件)

准备工作

这次我目的就是用阿里云的域名解析服务以cname来指向CloudFlare从而代理我部署在阿里云上的(没错,我脑子进水了,的确跑到国外再回来。。)WebSocket服务。要准备的东西就3个,1. 一台拥有80端口的服务器。 2. 阿里云域名一个,DNS是阿里云自己的DNS。3. CloudFlare有一个域名(随便什么域名,但是要使用CloudFlare的DNS解析)

本次参考文章:【CloudFlare】官方免费CNAME接入教程

场景

假设我现在有这么一个需求(部分内容做了隐藏或修改处理):

域名 ruteraliyun.com 是使用阿里云解析的域名,就是在阿里云 - 云解析DNS中DNS服务器状态显示**【正常】**的域名

阿里云 - 域名解析

然后 rutercloudflare.com 是我在CloudFlare添加的站点,就像这样

CloudFlare - 域名列表

我现在希望有一个二级域名 websocket.ruteraliyun.com,服务器是阿里云的国内服务器,假设IP是 122.11.22.33,我现在希望使用cloudflare来做这台服务器的CDN,不想将ruteraliyun.com整个添加到cloudflare中。

第一步,开通Cloudflare的SaaS服务

注意,cloudflare的SaaS服务并不是一个免费服务,但是它为免费用户提供了100个自定域名,对于普通用户来说应该是非常够用了,计费规则如下 CloudFlare产品 服务列表 - cloudflare.com

CloudFlare 产品 服务价格

所以第一步,需要开通cloudFlare的SaaS服务,开通服务需要提供信用卡,怕被扣费可以使用虚拟卡即可(我用了真实的卡),因为我已经开通了,所以就借鉴下别人的图片【源地址】把。

图片来自于 luotianyi.vc - 二、配置接入

开通后可以看到这样的界面

开通后的界面

第二步,添加需要代理的源站IP

这里我就选择使用back-to-aliyun这个名称把,容易理解点,然后使用A解析到我阿里云源站IP,即上面的122.11.22.33

设置CloudFlare的DNS

第三步,添加主机

回到CloudFlare左边Tab中的 SSL/TLS - 自定义主机名 这里,也就是刚刚用信用卡的那个地方,先添加一个自定义主机把,上面不是说想要代理 websocket.ruteraliyun.com 么,那么添加主机就添加 websocket.ruteraliyun.com

添加自定义主机

然后想代理到哪里,就添加哪个域名,这里添加 websocket.ruteraliyun.com,里面的最低TLS版本保持默认即可,不用和我一样,

最重要的就是 证书验证方法 了,这里别用TXT认证,如果有这个域名有企业邮箱,就选择邮箱验证,否则选择HTTP验证,如果使用TXT验证后面就收到这样的错误(我就是这里踩坑)

如果用了TXT,就这个错误

我使用的是HTTP验证,就是验证这个域名对应的服务器有没有操作权

image-20220717124506461

第四步,验证主机所有权

刚刚添加了主机后,返回就看到这样的页面

验证主机所有权

需要先去阿里云那边,添加一条解析

阿里云添加解析

先把 websocket.ruteraliyun.com 直接通过A解析解析到源站,使其能访问源站

HTTP验证就是CloudFlare会访问 http://websocket.ruteraliyun.com/.well-known/pki-validation/*******.txt 并判断服务器是否返回了CloudFlare想要的内容,所以我们先要把 待代理的域名解析到源站,也就是刚刚提到的 122.11.22.33,通过nginx或其他方式上传一个txt还是其他方法,最后只需要在浏览器输入 http://websocket.ruteraliyun.com/.well-known/pki-validation/*******.txt 能显示内容即可,就像这样

URL访问

设置好后,阿里云解析页面应该是这样的

设置好后的解析

第五步,设置SaaS 回退源

上面如果都正常的情况下,那么CloudFlare点击刷新会显示如下的内容

还差主机名

原因时还有回退源没有设置,刚刚还记得再CloudFlar中DNS里面添加了一条解析么,是解析到122.11.22.33源站的解析,名称叫 back-to-aliyun 的解析,那么这里回退源就填写 back-to-aliyun.rutercloudflare.com

设置回退源

添加后,过一会刷新页面,就能看到全部都显示有效了

全部有效了

至此,CloudFlare部分配置全部完成。回到阿里云。

最终步,阿里云使用CNAME解析

到这里快要完成了,最后一步就是将阿里云刚刚用A解析到源站的,改成CNAME解析,地址就是上面的回退地址 back-to-aliyun.rutercloudflare.com

修改阿里云解析为CNAME

确定,过个最多10分钟重新访问下地址吧,https的cloudflare的证书不用管,它会维护的,自己只需要维护自己的域名,例如说websocket.ruteraliyun.com就可以了。

如果出现526,自己排查

证书错误

如果出现了526,可以根据上面的提示进行排查,如果源站是80的,SSL/TLS - 概述就开灵活就行了,如果源站是自签证书,就开完全,如果源站用的是可信任的证书,就开严格

ssl-tls简单描述下