13

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

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

我在 Windows 中为 ASP.NET 做了很多这样的事情,因为 IIS 开箱即用地支持这一点,我知道这对于 Apache 来说也是正常的。

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

更新

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

4

2 回答 2

26

理论上,您可以构建一个模拟 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 用户身份运行您的 Node 服务(并且仍然代理它,使其看起来在端口 80 上)。您还可以在多个工作人员之间分散负载、提供静态数据、记录请求、重写 url 等等。Nginx 非常快(比 Apache 轻得多)。同框代理转发的开销是最小的,并且为您购买了如此多的功能和健壮性,以至于在我的书中它是一个灌篮。即使是次要的东西,比如 - 当我的节点服务崩溃或过载时,用户是否会遇到黑洞,或者“请原谅我们的灰尘,

于 2012-05-13T23:49:45.750 回答
5

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

于 2012-04-18T20:04:19.193 回答