如何将自定义域设置为 SAAS?

Joh*_*ckx 5 saas custom-domain

我正在 Linux 服务器上的共享主机上使用 PHP/HTML 构建 SAAS 产品,但我被困在域名部分。

目标

我会将我的 SAAS 应用程序托管在 app.mysaas.com

我的客户将他们的域名指向 app.mysaas.com

  • www.customer01.com
  • www.customer02.com
  • www.customer03.com
  • 等等…

客户域上的任何访问者都应该在app.mysaas.com他们没有注意到的情况下获得内容,这意味着他们会www.customer01.com在浏览器中看到。

此外,在访问时,www.customer01.com/contact/他们应该在app.mysaas.com/contact/没有注意到的情况下为他们提供内容,这意味着他们会www.customer01.com/contact/在浏览器中看到。

客户域上的 SEO 不应受到影响。所以通过 iframe 不是一种选择。

我需要我的客户提供 API 密钥。我以为我让我的客户将 TXT 记录添加到他们的 DNS 中,其中包含他们的 API 密钥,并在我的服务器上使用 PHP 获取它。

问题

  • 他们应该使用 A 记录还是 CNAME 记录通过 DNS 指向他们的域?(他们的电子邮件设置不应受到影响。)
  • 如何检测客户指向的域app.mysaas.com?(我想用 PHP 的 var $_SERVER['HTTP_HOST']

  • 如果我离开了,你能提供一个分步指南吗?

  • 有没有好的在线教程?

谢谢你的时间。

小智 9

他们应该使用 A 记录还是 CNAME 记录通过 DNS 指向他们的域?(他们的电子邮件设置不应受到影响。)

是的。当访问者在浏览器上输入他们的域时,名称服务器会检查 DNS 记录并路由到您的服务器。

如何检测指向 app.mysaas.com 的客户域?(我想用 PHP 的 var $_SERVER['HTTP_HOST'])

你是对的。您无需检测客户是否添加了 DNS 记录。当请求到达您的服务器时,您可以知道请求来自哪个域。

如果我离开了,你能提供一个分步指南吗?

我已经构建了管理客户域的UserCustomDomain。有一个使用 Node.js 的分步教程。


小智 5

为了补充 Sangwon 的答案,您在使用自定义域功能时将遇到的挑战之一是管理所有客户域的证书(假设您需要 HTTPS)。

我建议您查看Caddy,它是一个开源 Web 服务器,可以为您处理此问题。Caddy 可以通过如下配置充当反向代理:

https://<customer-domain>.com> {
    log {
        format json
    }
    reverse_proxy {
        to https://<your-domain>.com/
        header_up Host {http.reverse_proxy.upstream.host}
        header_up X-Real-IP {http.reverse-proxy.upstream.address}
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,Caddy 将动态获取和管理客户域的证书。设置完成后,请您的客户将他们的域 CNAME 到您的域,HTTPS 应该“正常工作”。

与第三方托管的反向代理相比,使用 Caddy 的一个好处是您仍然可以控制您可能希望托管的其他端口,例如 FTPS、SFTP 或 SSH 等。

我最近写了一篇博客,其中涉及更多细节。Ravenna Kev撰写了另一篇博客,也提供了更多解释。

引用 Revenna 的博客,我们希望在现实世界的 SaaS 场景中利用Caddy 的 API为每个自定义域添加反向代理记录,而无需手动编辑配置文件或重新启动服务。