使用Node.js托管多个网站

3
我目前正在学习node.js并且很喜欢它。然而,我注意到它似乎只适用于一个网站。所以它非常适合托管mydomain.com,但是如果我想使用它构建一个实际的完整web服务器呢?换句话说,我想托管mydomain.com,example.com,yourdomain.com等等。有哪些解决方案(模块)可用?我想简单地从请求对象中解析url,并从相应的目录中读取。例如,如果我收到example.com的请求,则从example_com目录中读取,或者如果我收到来自mydomain.com的请求,则从mydomain_com目录中读取。问题在于我不知道这会对性能和可扩展性产生什么影响。
我已经研究过Multi-node,但我还没有完全理解进程的概念(我是一个node初学者)。
欢迎任何建议。

我认为这取决于你在做什么,但我建议运行多个节点进程(即使是相同的程序),然后使用nginx进行路由。你更想探索方法还是有特定问题要解决? - travis
更多探索方法。我想使用node.js托管多个网站,所以想知道最好的方法是什么。 - selanac82
2个回答

4
你可以用几种不同的方法来做到这一点。一种方法是通过检查请求所发出的域并在应用程序内部进行路由,但除非您的应用程序非常基本,否则这可能会使它变得相当臃肿且混乱。像这样做的好时机可能是如果您正在编写一个博客平台,其中所有内容在所有域上都几乎相同。关键的区别可能在于如何查询数据以显示正确的数据。
在这种情况下,您可能会使用请求来查看正在访问哪个博客。
如果您想在同一服务器上托管几个不同的域,所有域都使用端口80(就像大多数网站一样),则需要将每个请求代理到不同的进程中。您可以使用nginx或甚至使用node自身来实现这一点。这完全取决于最适合您需求的方法。bouncy是快速设置此功能的一种方式,因为它是一个nodejs模块,并具有一些非常令人印象深刻的基准测试。然而,nginx(使用nginx进行代理)可能是最广泛使用的方法,因为许多nodejs服务器使用nginx提供静态内容。

http://blog.noort.be/2011/03/07/node-js-on-nginx.html https://github.com/substack/bouncy/


0
你可以使用connect的 vhost 中间件(在express中也可用)基于 Host: 头将请求分派到不同的请求处理程序。这假定所有内容都由同一节点进程在同一端口上处理;如果你真的需要分离的进程,那么关于使用nginx作为反向代理的建议可能是一个好方法。

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