Node.js - 每个用户的子域+允许自定义域

时间:2016-04-06 02:10:53

标签: node.js express dns subdomain

使用Node.js / Express我有一个REST API,它有多个使用此API的同构/通用应用程序。

我想允许用户拥有自己的子域名,这会在他们注册时动态发生。

从我研究过的最好的方法是将通配符记录指向同构/通用应用程序服务器,并在那里有一些逻辑解释寻找子域的请求并提供适当的页面。我假设需要坐在应用程序前面,并且每次向服务器发出请求都会发生这种情况。

这是解决此问题的最佳方法吗?还有另一种方法吗?

可伸缩性是否会出现任何潜在问题?

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

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

1 个答案:

答案 0 :(得分:5)

  

这是解决此问题的最佳方法吗?还有另一种方法吗?

     

可扩展性是否会出现任何潜在问题?

您使用通配符DNS描述的是最好的方法,并且您不会遇到由此引起的任何可伸缩性问题。另一种方法是使用具有API的DNS主机,例如Route 53,并为每个用户动态添加子域。但是,这比通配符有几个缺点。维护可能会变得很麻烦,新的DNS记录可能需要一段时间才能传播,并且您可能会快速达到限制(在Route 53上,您需要请求限制增加以超过每个AWS账户500个托管区域)。

  

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

与逻辑检查子域的方式相同(检查HTTP主机头)。当请求进入时,您可以检查主机标头并确定该域所属的用户(无论是子域还是完全自定义域);只要他们告诉你他们的域名是什么。添加CNAME是他们的责任(尽管你可以给他们指导,显然)。

如果您支持HTTPS,则只能在支持SNI的设备上执行此操作。您可以获得子域名的通配符证书,但是您需要域所有者上传PEM文件或获得他们的许可,并使用Lets Encrypt&#ap;和webroot域验证检查。