一尘不染

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

node.js

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

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

我在Windows中为ASP.NET做了大量的工作,因为IIS对此提供了开箱即用的支持,而且我知道这对于Apache也很正常。

如果这不是正确的问题,请随意将其移至其他论坛,以进行堆栈交换,或者提出建设性批评,而不是随意投下反对票。谢谢。

更新

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


阅读 169

收藏
2020-07-07

共1个答案

一尘不染

从理论上讲,您可以构建一个模拟Apache / Lighttpd /
Nginx功能的纯节点Web服务器,但我不建议这样做。实际上,对于严肃的生产服务,我建议您始终在Nginx或同等产品上领先您的服务)。

这是一个简单的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轻得多)。同框代理转发的开销很小,并且为您购买了如此多的功能和鲁棒性,这在我的书中是扣篮。甚至是很小的东西,例如-
当我崩溃或使节点服务超载时,用户是否也会出现黑洞或“请原谅我们的灰尘,

2020-07-07