事情的起因是公司要注册一个新域名。之前的域名都在 Godaddy 购买,想着这个域名可能 to C,套上 Cloudflare 的 CDN 可能更安全,性能也有空间提升。但买完之后,合作方要我们把 Nameserver 指向他们的 cloudflare ns,这才发现在 CF 购买的域名无法修改 NS,除非升级 CF 的套餐,每月 200-250 美元(取决于按月或按年)。同时,CF 也禁止在两个 CF 账号之间通过 CNAME 跳转,因此购买的域名也不能通过 CNAME 指向合作方的 worker。
这个就很糟糕,因为合作方要求使用他们在 CF 上的 worker 进行网站部署和构建,却不愿意泄露代码仓库和密钥。60 天的注册锁定期又不能把域名转到其他域名商,所以只能再买一个类似的域名,赶紧部署上去。
事后仔细研究了一下 CF 的 Nameserver。在 CF 的 文档 中有提及,他们会给每一个免费用户强制分配两个 NS 地址。为了解决不同用户同时修改 DNS 的优先级问题,CF 通过设计 51个男孩和50个女孩名字,将不同用户的 NS 地址区分,达到判定优先级的目的。那么问题来了,如果想使用 CF 的 serverless 服务(CDN, R2, worker, EMAIL 规则等),是不是就一定要把域名迁到 CF 绑死呢?
答案是不一定。在域名托管商,如 Godaddy, Namesilo, Namecheap 等,都有提供修改 NS 的功能。只要在域名托管商修改 NS 为 CF 的 Nameserver,由于每个用户有自己的 NS——当然一共 2550 种男女生名字组合,你总归能碰上相同的用户,但现实中能遇到太罕见——只要将域名的 NS 修改为 CF 中自己其他域名相同的 NS,就可以将该托管域名导入到 CF 进行管理。这也是 CF 不转移域名却可以管理域名 DNS 配置的原因。
所以,只要在 CF 拥有账号,未来所有的域名均可以导入到 CF,以便使用其遍布全球的边缘计算资源。
回到开头的问题。最终的解决方案是在 Godaddy 托管域名,并填写合作方的 CF nameserver 地址,问题就这样解决了。