我有一个多租户需求,需要在我的服务云(AWS + lambda、EC2、S3)中托管几个应用程序。我有几个 Angular 中的 UI 应用程序(托管在 AWS-S3 中)和 Node 中的 API (AWS lambda/EC2)。对于我这样的默认客户端,我可以像 5 个多子域一样创建它并重新路由 A 记录和所有内容,但对于其他租户,他们只是将 A 记录添加到他们的子域之一,他们可能会使用 CPanel 或任何常规服务或可能托管在 VPS(常规域)中。
我有这样的设置,我创建了多个子域并将它们的 A 记录更改为分别指向
- api.me.com
- app1.me.com
- app2.me.com
- ...ETC...
但对于不同的租户我必须创建一个设置
- api.myservice.tenant-domain.com
- app1.myservice.tenant-domain.com
- app2.myservice.tenant-domain.com
每当有新租户加入时,如何才能减少工作量,并且不会遇到租户域和 A 记录的技术挑战。请务必考虑子域的 SSL 证书挑战
我可以询问我的新租户选项
- 选项 1:我可以要求我的租户向 myservice.tenant-domain.com 添加一条 A 记录,并且我对位于同一子域下的所有应用程序使用基本 href(不是首选)
- 方案二:要求租户创建多级子域名,并分别为每个应用放置A记录
- 选项 3:我可以使用通配符多级子域。这里有哪些挑战?
请帮我一下。
这些看起来都不好。但还有其他方法:
选项 2b:要求租户创建 CNAME 记录,通过您选择的某个子域间接指向。对证书没有影响,但为您提供了灵活性,仍然允许您在需要时自行更改 A 记录。
选项2c:要求租户创建一条DNAME记录,它也是一个类似于CNAME的别名,但它不是为名称本身设置别名,而是为所有子域设置别名。(这有点像“通配符 CNAME”。)
例如,“myservice.tenant-domain.com.DNAMEtenant3.your-domain.com”。将允许您代表您自己创建 app2.tenant3.your-domain.com,并且它将自动以 app2.myservice.tenant-domain.com 的形式进行访问。但是,并非所有 DNS 服务器都支持添加 DNAME 记录。
选项 4:要求租户创建 NS 记录并将整个子区域委托给您自己的名称服务器。然后您就可以完全控制 DNS 记录。(当然,那么您有责任提供可靠的名称服务器。)
这与购买域名时发生的委派类型相同,但实际上它可以在任何级别完成,只需创建任何 DNS 服务器都可以执行的 NS 记录即可。然而,就 DNS 配置而言,这可能是您“最努力”的选项。
对于证书来说,只是颁发的不同而已;客户端浏览器并不关心子域在幕后如何工作,只要证书与 URL 匹配即可 - 无论域是通配符、别名还是其他内容,都无关紧要。对于带有“HTTP 挑战”的发行,所有选项都同样有效;对于“DNS 挑战”,NS 或 DNAME 可能会让事情变得更简单。