![使用 Cloudflare 和 Lets Encrypt 提供自定义 CNAME 的设计](https://linux22.com/image/761427/%E4%BD%BF%E7%94%A8%20Cloudflare%20%E5%92%8C%20Lets%20Encrypt%20%E6%8F%90%E4%BE%9B%E8%87%AA%E5%AE%9A%E4%B9%89%20CNAME%20%E7%9A%84%E8%AE%BE%E8%AE%A1.png)
目前我们有一个基于云的 SaaS 应用程序,它在 Cloudflare 上的域后面运行。假设为 example.com。
主面板和应用程序位于cloud.example.com
。当客户注册时,他们可以选择一个子域,以便访问控制面板和应用程序的前端。假设customer.example.com
由于 example.com 在 Cloudflare 上,只需简单调用 Cloudflare API 添加 A 记录即可设置其中一个域,并通过 Cloudflare 代理所有 CDN 并提供 DDoS 优势。
我们现在想让客户提供自己的域名,用于美观和品牌推广等目的。假设用户想要使用app.customer.com
自己的域名。通常,我们会指示客户创建一个 CNAME 来将该域名映射到customer.example.com
我们生成的域名。但是当我们这样做时,我们会收到 DNS 解析错误。这仅在 Cloudflare Enterprise 计划中受支持。
我认为有两个解决此问题的好方法:
创建一个单独的微服务
dns.example.com
,所有自定义域都映射到该微服务。无论将哪个域映射到该微服务,都可以使用类似这样的前缀customer.dns.example.com
,也可以尝试配置 Nginx 以获取主机并使用该主机。这dns.example.com
在 Cloudflare 网络中,但“仅限 DNS”。然后使用 CNAME 记录将命中此地址的请求映射到
customer.example.com
(位于 Cloudflare 网络上,并且共享同一域(包括名称服务器))。因此app.customer.com
-> CNAME ->customer.dns.example.com
-> CNAME ->customer.example.com
这样做的好处是我们可以利用 Cloudflare 的代理,尽管这有点复杂。
仅将 Cloudflare 用于 DNS。由于没有 Cloudflare 代理,客户被分配了子域名,并且从他们的自定义域名到分配给他们的域名的简单 CNAME 可以正常工作。这样,就可以利用主机的 DDoS 保护。
也许从 提供静态文件
static.example.com
,并在 Cloudflare 上进行代理以利用 CDN 等。
我的问题实际上归结为,在这种情况下不使用 Cloudflare 的服务是不是一个好选择?公共 IP 是公共的,因此得名,但将服务器运行的 IP 放在公共 A 名称上可以吗?另外,我不想强迫我的客户必须使用 Cloudflare 进行设置,我希望它是无缝的。
有任何意见、想法或设计,请分享!
快速参考:SSL 证书实际上并不是问题,无论哪种方式我都可以轻松覆盖/生成它们。