使用node.js托管多个站点

时间:2012-08-09 19:45:07

标签: node.js webserver

我正在学习node.js并喜欢它。然而,我注意到它似乎真的只适合一个网站。所以它很适合托管mydomain.com,但如果我想用它构建一个实际的完整Web服务器该怎么办呢。换句话说,我想主持mydomain.com,example.com,yourdomain.com等。有哪些解决方案(模块)?我只是想从请求对象中解析url,只是从相应的目录中读取。例如,如果我收到example.com的请求,则从example_com目录中读取,或者如果我从mydomain.com获取请求,请从mydomain_com目录中读取。这里的问题是我不知道这将如何影响性能和可伸缩性。

我已经研究过Multi-node,但我还没有完全遵循流程的想法(我是节点初学者)。

欢迎任何建议。

2 个答案:

答案 0 :(得分:4)

你可以通过几种不同的方式做到这一点。一种方法是通过检查请求的域名直接将其写入您的Web应用程序,然后在您的应用程序中进行路由,但除非您的应用程序非常基本,否则会使其变得相当臃肿并且可能变得混乱。做这样的事情的好时机可能就是如果你正在写一个博客平台,你所有的域里的一切都差不多。关键区别可能在于您如何查询数据以显示正确的数据。

在这种情况下,您可能会使用该请求来查看正在访问的博客。

如果您想在同一台服务器上只使用端口80托管几个不同的域(与大多数网站一样),您需要将每个请求代理到其他进程。您可以使用nginx甚至节点本身来完成此操作。这一切都归结为最符合您需求的东西。 bouncy是一个快速的方法来设置这个作为nodejs模块,并有一些非常令人印象深刻的基准测试。 nginx(proxy with nginx)可能是最常用的方法,因为很多nodejs服务器都使用nginx来提供静态内容。

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

答案 1 :(得分:0)

您可以使用connect的vhost中间件(也可以在express中使用)根据Host:标头将请求分派给单独的请求处理程序。这假设所有内容都由同一端口上的同一节点进程处理;如果你真的需要单独的进程,那么关于使用nginx作为反向代理的建议可能是要走的路。