使用 Cloudflare 和 Lets Encrypt 提供自定义 CNAME 的设计

使用 Cloudflare 和 Lets Encrypt 提供自定义 CNAME 的设计

目前我们有一个基于云的 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 计划中受支持。

我认为有两个解决此问题的好方法:

  1. 创建一个单独的微服务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 的代理,尽管这有点复杂。

  2. 仅将 Cloudflare 用于 DNS。由于没有 Cloudflare 代理,客户被分配了子域名,并且从他们的自定义域名到分配给他们的域名的简单 CNAME 可以正常工作。这样,就可以利用主机的 DDoS 保护。

    也许从 提供静态文件static.example.com,并在 Cloudflare 上进行代理以利用 CDN 等。

我的问题实际上归结为,在这种情况下不使用 Cloudflare 的服务是不是一个好选择?公共 IP 是公共的,因此得名,但将服务器运行的 IP 放在公共 A 名称上可以吗?另外,我不想强​​迫我的客户必须使用 Cloudflare 进行设置,我希望它是无缝的。

有任何意见、想法或设计,请分享!

快速参考:SSL 证书实际上并不是问题,无论哪种方式我都可以轻松覆盖/生成它们。

相关内容