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

8

我正在使用共享主机上的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的变量$_SERVER['HTTP_HOST']

  • 如果我离谱了,您能提供一个详细的步骤指南吗?

  • 是否有任何好的在线教程?

感谢你的时间。

3个回答

9

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

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

如何检测客户的域名是否指向app.mysaas.com?(我想用 PHP 的变量 $_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}
    }
}

Caddy将动态获取和管理客户域名的证书。配置完成后,让您的客户将其域名CNAME到您的域名,HTTPS就会“像魔术一样”正常工作。
使用Caddy而不是由第三方托管的反向代理的好处是,您仍然控制其他想要托管的端口,例如FTPS、SFTP或SSH等。
我最近写了一篇博客,详细介绍了这个问题。Ravenna Kev 撰写了另一篇博客,提供了更多解释。
引用Revenna的博客,我们将希望在实际的SaaS场景中利用Caddy的API为每个自定义域添加反向代理记录,而无需手动编辑配置文件或重新启动服务。

@jonothan,请问你写的博客文章在哪里?链接指向了Caddy服务器网站。 - Art

2

Cloudflare的SaaS SSL

另一种选择是像Cloudflare的SaaS SSL这样的廉价服务,它可以为您的客户提供以下功能:

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

它的工作原理...简单易行

  1. 客户添加CNAME (例如,app.customer.com => app.mysaas.com)
  2. SaaS调用Cloudflare的API请求SSL证书
  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 的网站:


虽然很贵,但每月5000美元。 - Charanjit Singh
@CharanjitSingh 你是否在关注那些免费和低级别计划中没有的功能?https://developers.cloudflare.com/cloudflare-for-platforms/cloudflare-for-saas/plans/ - Jonathan B.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接