我的最终目标是使每个服务器实例的node.js更具成本效益。
我不是在玩游戏或聊天室,而是在为客户提供简单的网站。我想在单个服务器上容纳多个客户端,但使用主机头映射将多个网站从80端口运行。我仍想在使用Express,但如果可能的话,它更像是从端口80路由到其他节点应用程序的路由。如果以此方式完成节点,则可能会更便宜,但就我的目的而言,它目前更昂贵,因为如果每个客户在端口80上运行,他们都将需要自己的盒子。此外,我的动机是专注于节点开发,但必须有一个理由因此在成本方面。
我在Windows中为ASP.NET做了大量的工作,因为IIS对此提供了开箱即用的支持,而且我知道这对于Apache也很正常。
如果这不是正确的问题,请随意将其移至其他论坛,以进行堆栈交换,或者提出建设性批评,而不是随意投下反对票。谢谢。
更新
我采用的方法是使用静态托管(通过gatspy和s3),然后使用API,而不是通过来自客户端的帖子消息和来自服务器的API密钥注册域,并随着站点的更改定期生成静态站点,但是感谢所有建议!
从理论上讲,您可以构建一个模拟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轻得多)。同框代理转发的开销很小,并且为您购买了如此多的功能和鲁棒性,这在我的书中是扣篮。甚至是很小的东西,例如- 当我崩溃或使节点服务超载时,用户是否也会出现黑洞或“请原谅我们的灰尘,