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

pes*_*ato 8 subdomain dns node.js express

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

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

根据我的研究,最好的方法是将通配符记录指向同构/通用应用程序服务器,并在那里有一些逻辑解释寻找子域的请求并提供适当的页面.我假设需要坐在应用程序前面,并为服务器的每个请求发生.

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

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

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

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

Pau*_*aul 5

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

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

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

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

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

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