这篇文章记录我在使用 Cloudflare 自定义主机名过程中的一些方法和技巧,分享给需要的朋友。「自定义主机名」功能基于 Cloudflare for SaaS,它允许我们通过已经托管到 Cloudflare 网络的域将 Cloudflare 的能力扩展到其它域,非常适合不想或无法将域名托管到 Cloudflare 的情形。

5月份时,我将服务的部分 CDN 流量由腾讯云切换至 Cloudflare,经过这几个月的使用和研究,我对一个世界一流的云平台应该具备哪些优秀的品质有了更深一步的理解。回过头再看国内的云厂商诸如阿里云、腾讯云等,在相关的领域里,可以说在实力上都被 Cloudflare 完全碾压。在我的有限认知中,还找不出第二个像 Cloudflare 这样领先而慷慨的厂商了,这大概是我第一次对一款网络产品有了相见恨晚的感觉。

自定义主机名

CDN 流量由腾讯云切换至 Cloudflare 文章最后,我简单提到了「自定义主机名」。在实际体验 Cloudflare 一段时间之后,我发现「自定义主机名」真的是一个非常实用的功能,它允许我们做尽可能少的改动而享受到 Cloudflare 的云服务。

从原理上讲,「自定义主机名」功能基于 Cloudflare for SaaS,它允许我们通过已经托管到 Cloudflare 网络的域将 Cloudflare 的能力扩展到其它域,非常适合不想或无法将域名托管到 Cloudflare 的情形。其基本工作流程如下:

Cloudflare for SaaS

大致使用步骤如下:

添加由 Cloudflare 托管的域名

想要实现「自定义主机名」首先需要一个由 Cloudflare 托管的域名。在 Cloudflare 后台添加网站,输入域名,将域名的 NS 设置为分配的一组 Cloudflare 品牌名称服务器。这个域名不需要备案,它仅是作为实现 Cloudflare for SaaS 能力的一个必要条件。这里假设托管的域名为 kanchuan-saas.com

Cloudflare add site

添加回退源

接下来为 kanchuan-saas.com 域 DNS记录添加一个 A 记录,假设为 rollback,记录值为我们业务服务器 IP,并开启代理状态小黄云朵。然后,依次打开 SSL/TLS -> 自定义主机名,将 rollback.kanchuan-saas.com 设置为回退源。

添加自定义主机名

之后,即可操作 SSL/TLS -> 自定义主机名 -> 添加自定义主机名,添加任意业务域名到 Cloudflare 网络。这里假设业务域名为 kanchuan.com,按照页面提示,需要操作两步:

1、修改kanchuan.com 域DNS记录

增加或修改 @ 记录,记录类型为 CNAME,记录值为 rollback.kanchuan-saas.com,即回退源地址。

2、按提示信息,添加 _acme-challenge 前缀的 TXT 记录,以作为自动证书颁发和续订的依据。

稍等片刻,待证书状态、主机名状态都显示“有效”时,即表明 kanchuan.com 域的服务已经通过 Cloudflare for SaaS 的方式使用了 Cloudflare 的服务。

关于自定义主机名的常见问题

回退源的作用是什么?

在以上的操作中,我们可以了解到,回退源包含了业务服务器的 IP 地址,通过「自定义主机名」建立了业务域名和回退源的绑定关系。在业务请求经过 Cloudflare 网络节点时,即可正确地查找到服务器 IP。回退源在这里充当的中间者,业务服务器并不需要响应来自回退源域名的请求,回退源域名可以是业务域名也可以不是业务域名。

自定义主机名的使用限制

目前,在 Cloudflare 的免费计划中,每一个由 Cloudflare 托管的域名仅有一个子域/主机能成为回退源。当我们需要自定义主机名的服务位于多个主机(IP)时,需要添加多个类似 kanchuan-saas.com 这样的托管域名。解除这个限制可能需要升级为付费计划。

实际上,自定义主机名更适合与小型业务(多个服务位于同一个服务器中),大型服务特别是使用分布式服务器时,使用自定义主机名反而会造成问题复杂化。

信用卡绑定

自定义主机名,需要开启 SSL For SAAS Basic 服务,前提是 Cloudflare 账户需要绑定信用卡。Cloudflare 的免费计划中,费用为 US$0.00/月,不会实际扣费。

参考:Cloudflare for SaaS