7

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

目标

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

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

  • www.customer01.com
  • www.customer02.com
  • www.customer03.com
  • 等等……</li>

客户域上的任何访问者都应该在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']

  • 如果我走得很远,你能提供一个分步指南吗?

  • 有什么好的在线教程吗?

谢谢你的时间。

4

3 回答 3

9

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

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

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

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

如果我走得很远,你能提供一个分步指南吗?

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

于 2020-04-14T06:39:50.367 回答
4

为了补充 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}
    }
}

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

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

我最近写了一篇博文,内容更详细一些。Ravenna Kev写了另一个博客,也提供了更多解释。

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

于 2021-07-01T13:50:54.903 回答
0

Cloudflare 的SaaS SSL

另一种选择是廉价服务,例如 Cloudflare 的SSL for SaaS产品,它为您的客户提供:

  • 虚域支持
  • 已配置 TLS 证书
  • 内置 DDoS 缓解
  • 机器人管理和防火墙规则(附加组件)

它是如何工作的......简单如 1-2-3

  1. 客户添加CNAME (例如,app.customer.com => app.mysaas.com)
  2. SaaS 调用 Cloudflare API请求 SSL Cert
  3. 完毕!

您客户的客户现在可以通过 HTTPS 安全地访问您的应用程序的白标版本,并利用它启用的所有优势,例如 HTTP/2 协议。这些证书及其密钥是唯一颁发给您客户的主机名的(即,不与任何其他客户位于同一地点)。

简单的 Cloudflare API

只是为了看看它是多么容易设置,这里是一个 curl 请求形式的 API 调用:

curl -sXPOST -H "X-Auth-Key: [YOUR KEY]" -H "X-Auth-Email: [YOUR EMAIL]" -H "Content-Type: application/json" https://www.cloudflare.com/api/v4/zones/[YOUR ZONE ID]/custom_hostnames \
-d '
{ "hostname": "support.yourcustomer.site",                         
      "ssl": {
        "method":"http",
        "type":"dv"
      }
}' 

成本

自定义主机名的计费基于使用情况,目前为您创建的每个自定义主机名每月 2 美元。自 2021 年 4 月起,此产品适用于所有计划级别,不仅仅是企业。

更多信息

注意:这个答案的大部分内容摘自 Cloudflare 的网站:

于 2021-11-20T19:01:34.417 回答