Node.js - 为每个用户创建子域名和允许自定义域名

15

使用Node.js / Express,我有一个REST API和多个等同/通用应用程序来消耗此API的服务。

我希望允许用户拥有自己的子域,并在其注册时动态发生。

根据我的研究,最好的方法是将通配符记录指向等同/通用应用程序服务器,并在那里具有解释请求的逻辑,寻找子域并提供适当的页面。 我假设这需要位于应用程序前面,并且对服务器上的每个请求进行操作。

这是否是解决此问题的最佳方法? 是否有其他替代方案?

是否会存在潜在的可扩展性问题?

然后,我希望允许用户拥有自定义域名。 Tumblr和其他服务提供了类似的功能,允许您将CNAME记录指向用户的子域。 我无法找到有关其工作原理的详细信息。

允许用户在应用程序中使用自定义域的最佳方法是什么?

1个回答

10

这种方法是否是解决问题的最佳途径?还有其他替代方案吗?

在可扩展性方面会出现任何潜在问题吗?

你所描述的通配符DNS是最佳途径,而且不会遇到由此引起的可扩展性问题。另一种选择是使用带有API的DNS主机(例如Route53),并为每个用户动态添加子域名。然而,这种方法有几个缺点。它可能变得难以维护,可能需要一段时间才能传播新的DNS记录,并且您可能很快达到限制(在Route53上,您需要请求限制增加以超过每个AWS账户500个托管区域)。

允许用户在应用程序中使用自定义域的最佳方法是什么?

与检查子域名的逻辑相同(检查HTTP Host头)。当请求到来时,您可以检查Host头并确定该域属于哪个用户,无论是子域还是完整的自定义域;只要他们告诉您他们的域名。添加CNAME是他们的责任(尽管您可以给他们提供指导)。如果支持HTTPS,则只能在支持SNI的设备上执行。您可以为子域名获取通配符证书,但您需要获得域所有者上传PEM文件的许可或使用类似于LetsEncrypt的api并进行webroot域验证检查。


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