我有一个多租户需求,我需要在我的服务云(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 记录,并使用 base href 将所有应用程序置于同一子域下(不是首选)
- 方案二:要求租户创建多级子域名,并为每个应用分别添加 A 记录
- 选项 3:我可以使用子域名的通配符多级。这有什么挑战?
请帮帮我。
答案1
这些方法看起来都不太好;但是还有其他方法:
选项 2b:要求租户创建 CNAME 记录,通过您选择的某个子域间接指向。对证书没有影响,但为您提供灵活性,仍允许您根据需要自行更改 A 记录。
选项 2c:要求租户创建 DNAME 记录,这也是像 CNAME 一样的别名,但它不是对名称本身进行别名,而是对所有子域进行别名。(这有点像“通配符 CNAME”。)
例如,“myservice.tenant-domain.com. DNAME tenant3.your-domain.com.”允许您以自己的名义创建 app2.tenant3.your-domain.com,并且该域名将自动以 app2.myservice.tenant-domain.com 的形式访问。但是,并非所有 DNS 服务器都支持添加 DNAME 记录。
选项 4:要求租户创建 NS 记录并代表将整个子区域分配给您自己的名称服务器。然后,您将完全控制 DNS 记录。(当然,然后您有责任提供可靠的名称服务器。)
这与购买域名时发生的委托相同,但实际上它可以在任何级别完成,只需创建 NS 记录即可,任何 DNS 服务器都可以做到这一点。不过,这可能是你的就 DNS 配置而言。
至于证书,它只会对颁发产生影响;只要证书与 URL 匹配,客户端浏览器就不会关心子域在后台如何工作 - 不管域是通配符、别名还是其他内容。对于使用“HTTP 挑战”的颁发,所有选项都同样有效;对于“DNS 挑战”,NS 或 DNAME 可能会使事情变得最简单。