细说Cloudflare for SaaS
由于特殊的原因,了解到了赛博菩萨的Cloudflare for SaaS服务,遂仔细研究了下,把一些理解和心得记录一下。
- 那Cloudflare for SaaS是个什么东西?先看下图:
- 图中绿框的部分,在CF SaaS中叫做回退源,要求必须是指向对应服务,并开启了CF代理(即小黄云)的域名。
- 图中红框的部分,在CF SaaS中叫自定义主机名,实际上可以是除了回退源以外任意一个域名,不一定要托管在CF上。
- 整个运作的原理(这里敲黑板,请仔细阅读并理解):自定义主机名中的域名只要是指向了回退源所在的域(不要求一定是回退源本身),例如回退源为
a.saastest.us.kg
,同时该域中有另外一个域名b.saastest.us.kg
,自定义主机名中的域名CNAME指向了b.saastest.us.kg
,且b.saastest.us.kg
的A记录或者CNAME记录最终是CF的CDN地址或者反代地址,此时只要访问自定义主机名,只要没有访问成功(即b.saastest.us.kg
指向的服务不能正常返回),就会返回回退源a.saastest.us.kg
的内容。 - 知道了以上的知识,按照CF的规则,我们就可以玩起来了。
在实际操作Cloud Tunnel的加速前,我们先用普通网站的栗子来梳理下整个流程,方便大家理解上边这段话。
举个栗子1-普通网站使用SaaS优选
- 准备一个普通网站,为了图省事,我是在Serv00上添加了一个名为
web.saastest.us.kg
的网站
- 准备两个域(如果想优选域名必须使用两个域,如果回退源域名和客户域名在同一个域,会导致重定向次数过多的错误),其中
meina.cn.eu.org
域用来当作回退源所在域,添加两条记录,其中source.meina.cn.eu.org
指向Serv00服务器地址,并开启代理,作为回退域域名,edge.meina.cn.eu.org
指向test.cloudflare.182682.xyz
,不开代理,这个域名将成为meina.cn.eu.org
这个域下的优选域名(*.cloudflare.182682.xyz
是微测提供的CF优选泛域名,*可以随便替换,我这里替换的是test),添加好之后如下图:
- 设置
saastest.us.kg
所在域作为客户域,即提供给客户的网站域名,我这里设置的是web.saastest.us.kg
,并设置CNAME记录指向meina.cn.eu.org
的域,这个案例中,是将web.saastest.us.kg
指向edge.meina.cn.eu.org
,添加好如下:
- 显然,此时我们用
web.saastest.us.kg
访问是不能得到正确结果的,会报Error 1000错误:
- 在CF上进
meina.cn.eu.org
的设置,依次点击SSL/TLS-自定义主机名,首次进的话需要绑定信用卡进行开通,开通后的页面如下:
- 在回退源这里填入
source.meina.cn.eu.org
,即指向Serv00的地址,等待回退源状态变为有效:
- 然后我们添加自定义主机名,即
web.saastest.us.kg
- 由于之前我们已经让
web.saastest.us.kg
指向了meina.cn.eu.org
域中的edge.meina.cn.eu.org
,稍等片刻,就可以看到主机名状态为有效,证书状态为待验证(TXT),如果之前没有让web.saastest.us.kg
指向meina.cn.eu.org
域的话,主机名状态会报错,只需要去添加一下web.saastest.us.kg
的CNAME记录再回来刷新即可。
- 然后我们切换到
saastest.us.kg
域,给web.saastest.us.kg
添加以上的TXT记录,如下:
- 最后回到
meina.cn.eu.org
域的自定义主机名页面,等待几分钟,证书状态变成有效:
- 此时我们就可以用
web.saastest.us.kg
进行访问了:
- 最后等待DNS收敛后,就可以去对比下优选IP前后的区别了,觉得效果不理想的,可以自行修改以上步骤中
edge.meina.cn.eu.org
的记录来实现你自己的优化。
- 最后需要提醒的是,整个过程的设置需要在两个域中进行切换设置,请确保设置时处于对应域中,或者直接开两个网页,一个网页一个域进行设置,以免出错。
举个栗子2-Cloudflare Tunnel的IP优选
除了传统网站,Cloudflare Tunnel(原Argo)也能通过CF SaaS进行IP优选,限于篇幅,这里就不对Cloudflare Tunnel的安装进行展开了,假定你已经有一个正常运行的Tunnel。
- 交代下栗子的背景,我在内网服务器上安装了一个Web服务,监听38448端口,同时在这台服务器上安装并启用了Cloudflare Tunnel,名称为SaaSTest,在这个案例中,我们使用
source.meina.cn.eu.org
指向这个服务的套接字,作为回退源,用web.saastest.us.kg
来进行访问,配置前请检查下Tunnel的状态是HEALTHY,如下图:
- 在Tunnel配置中,添加一个Public Hostname:
- 如下图填入
source.meina.cn.eu.org
,Type为HTTP,URL为localhost,即对于服务器Tunnel进程来说是本地的,由于我们仅将source.meina.cn.eu.org
作为回退源,因而这里的URL也可以直接填localhost,带不带端口号都可以:
- 再添加一个Public Hostname,填入
web.saastest.us.kg
,Type同样为HTTP,由于这个域名是供用户访问的,因此这里的URL必须为完整的套接字,在这个例子中URL为localhost:34884
- 设置完如下,其中红框的必须为完整套接字,蓝框既可以带端口号,也可以不带端口号:
- 同时,在
meina.cn.eu.org
域和saastest.us.kg
域中会生成对应的DNS记录,指向Tunnel:
- 在
meina.cn.eu.org
域中我们再添加edge.meina.cn.eu.org
指向test.cloudflare.182682.xyz
,作为该域下的优选域名:
- 在
saastest.us.kg
域中,我们直接修改web.saastest.us.kg
的DNS记录,改为指向edge.meina.cn.eu.org
,因为稍后我们将把web.saastest.us.kg
加入到自定义主机名中,不再需要指向具体的Tunnel了:
- 回到
meina.cn.eu.org
域,完成回退源和自定义主机名的添加(和栗子1的操作是一模一样的,不会的直接去栗子1看),完成后如下:
- 此时,我们再用
web.saastest.us.kg
访问,就可以正常访问搭设的内网服务了,并且域名解析也会是优选的:
最后一点小心得
- 另外看到一些视频UP主或博主写的,不在回退域建立优选域名,而是直接把客户域指向优选域名,其实这是错误的(除非客户域托管在支持分流的DNS商那边),因为等CF缓存刷新后,在自定义主机名这里就会看到主机名状态是
已移动(错误)
,这时候需要重新把客户域指向回退域中任一个域名才能解决。
- 从以上的配置步骤中,我们可以看到除了回退源所在的域必须由CF托管外,客户域是可以由任一个DNS商来进行托管的,假如使用华为云这些支持分流的DNS商的话,回退源上的那个优选域名都不需要设置,直接在客户域上进行分流设置即可,这里就不展开细说了,相信理解了原理的同学都能自己配出来,这里就交给大家自行摸索了,也算是验证下对本文的理解了^.^