使用Node.js / Express我有一个REST API,它有多个使用此API的同构/通用应用程序。
我想允许用户拥有自己的子域名,这会在他们注册时动态发生。
从我研究过的最好的方法是将通配符记录指向同构/通用应用程序服务器,并在那里有一些逻辑解释寻找子域的请求并提供适当的页面。我假设需要坐在应用程序前面,并且每次向服务器发出请求都会发生这种情况。
这是解决此问题的最佳方法吗?还有另一种方法吗?
可伸缩性是否会出现任何潜在问题?
我希望允许用户拥有自定义域名。 Tumblr和其他服务提供了类似的功能,允许您将CNAME记录指向用户子域。我一直无法找到有关其工作原理的更多信息。
允许用户在应用中使用自定义域名的最佳方式是什么?
答案 0 :(得分:5)
这是解决此问题的最佳方法吗?还有另一种方法吗?
可扩展性是否会出现任何潜在问题?
您使用通配符DNS描述的是最好的方法,并且您不会遇到由此引起的任何可伸缩性问题。另一种方法是使用具有API的DNS主机,例如Route 53,并为每个用户动态添加子域。但是,这比通配符有几个缺点。维护可能会变得很麻烦,新的DNS记录可能需要一段时间才能传播,并且您可能会快速达到限制(在Route 53上,您需要请求限制增加以超过每个AWS账户500个托管区域)。
允许用户在应用程序中为其区域使用自定义域的最佳方法是什么?
与逻辑检查子域的方式相同(检查HTTP主机头)。当请求进入时,您可以检查主机标头并确定该域所属的用户(无论是子域还是完全自定义域);只要他们告诉你他们的域名是什么。添加CNAME是他们的责任(尽管你可以给他们指导,显然)。
如果您支持HTTPS,则只能在支持SNI的设备上执行此操作。您可以获得子域名的通配符证书,但是您需要域所有者上传PEM文件或获得他们的许可,并使用Lets Encrypt&#ap;和webroot域验证检查。