如何使Node.js在端口80上的网站多租户?

我的最终目标是使每个服务器实例的node.js更具成本效益。

我没有运行游戏或聊天室,而是为客户提供简单的网站。 我想在一台服务器上安装多个客户端,但是使用主机头映射,有多个网站从端口80运行。 我想仍然使用快递,但是如果可能的话,它更像是从端口80到其他节点应用的路由select。 如果以这种方式完成节点,节点可以更便宜,但是对于我的目的,节点可能更便宜,因为如果在端口80上运行,每个客户都需要自己的盒子。另外,我的动机是关注节点开发,但是必须有一个理由所以在成本方面。

我在Windows中为ASP.NET做了相当多的工作,因为IIS支持这种开箱即用的方式,我知道这对于Apache来说也是正常的。

如果这不是一个正确的问题,或者给予build设性的批评,而不是随意的投票,那么随意将这个问题提交给另一个论坛进行交换。 谢谢。

更新

我采取的方法是使用静态主机(通过gatspy和S3),然后是一个API,而不是注册域通过客户端的邮件和服务器的API密钥,并定期生成静态网站的网站更改,但感谢所有的build议!

从理论上讲,你可以build立一个模拟Apache / Lighttpd / Nginxfunction的纯节点networking服务器,但我不会推荐它。 事实上,对于严肃的生产服务,我build议始终使用Nginx或类似的服务来提供服务(请参阅本文和本文 )。

下面是一个简单的Nginxconfiguration如何工作在端口80上暴露的两个子服务。

 worker_processes 4; events { worker_connections 1024; } http { include mime.types; default_type text/html; server { listen 80; server_name service1.mydomain.com location / { proxy_pass http://127.0.0.1:3000/; } } server { listen 80; server_name service2.mydomain.com location / { proxy_pass http://127.0.0.1:3001/; } } } 

我已经看到生产盒内核恐慌,因为节点不会默认情况下加载负载,并优先接受新的连接,而不是处理现有的请求 – 批准,它“不应该”崩溃的内核,但它。 而且,通过在端口3000上运行,你可以非常less的权限运行你的Node服务(并且仍然代理它,使它看起来在端口80上)。 你也可以在多个工作者之间传播负载,服务静态,logging请求,重写URL等等。Nginx非常快(比Apache轻得多)。 同盒子代理转发的开销是最小的,为您提供了如此多的function和强大的function,以至于我的书中的扣篮。 即使是微不足道的东西,比如 – 当我崩溃或者超载我的节点服务时,用户会得到一个黑洞,或者“赦免我们的灰尘,我们的服务器正在被维护”。

如何使用适当的反向代理(如HAProxy) ,让代理侦听端口80,并根据headers.host委托给非公共端口上的多个节点实例(例如10000,10001等)。