如何在端口80上为网站制作Node.js多租户?

时间:2012-04-18 18:52:38

标签: node.js

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

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

我在Windows中为ASP.NET做了很多,因为IIS支持开箱即用,我知道这对Apache也是正常的。

如果这不是正确的问题或者给予建设性的批评而不是随机的downvote,请随意将其移至堆栈交换中的另一个论坛。感谢。

更新

我采用的方法是使用静态托管(通过gatspy和s3),然后使用API​​,通过来自客户端的邮件和来自服务器的API密钥注册域名,并在站点更改时定期生成静态站点,但感谢所有建议!

2 个答案:

答案 0 :(得分:25)

理论上,您可以构建一个模拟Apache / Lighttpd / Nginx功能的纯节点Web服务器,但我不推荐它。事实上,对于严肃的制作服务,我建议总是使用Nginx或等效的服务面对您的服务(请参阅thisthis)。

以下是一个简单的Nginx配置如何适用于在端口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/;
    }
  }
}

我看到生产框内核出现恐慌,因为Node默认情况下没有限制加载,并优先接受处理现有请求的新连接 - 授予它,“不应该”崩溃内核,但确实如此。此外,通过在端口3000上运行,您可以以非root用户身份运行您的节点服务,并且权限很少(并且仍然代理它以使其看起来位于端口80上)。您还可以在多个工作人员之间分配负载,提供静态,日志请求,重写URL等等.Nginx非常快(比Apache轻得多)。相同机箱代理转发的开销很小,并且购买了如此多的功能和强大功能,这在我的书中是一个大满贯扣篮。即使是很小的东西,比如 - 当我崩溃或超载我的节点服务时,用户会遇到黑洞,或者“原谅我们的灰尘,我们的服务器正在维护”飞溅。

答案 1 :(得分:5)

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