【问题标题】:Will running node.js with Apache causes too much performance degradation?使用 Apache 运行 node.js 会导致过多的性能下降吗?
【发布时间】:2011-11-07 19:55:04
【问题描述】:

我正在尝试在同一个 Amazon EC2 实例上运行 Apache 和 node.js。经过网上研究,我想出了以下解决方案:

  1. 在端口 9000 上运行 Apache

  2. 在端口 8001、8002 等上运行 node.js 应用程序。

  3. 在 node.js 中创建一个reverse proxy,在端口 80 上运行。它根据主机名将请求路由到不同的端口。

此解决方案有效。 (虽然我还没有找到自动启动node.js的方法) 我的问题是,运行多个节点实例会导致性能下降吗?或者反向代理会有问题吗?

谢谢,

【问题讨论】:

标签: apache node.js proxy


【解决方案1】:

性能下降

相反。如果您对节点所做的只是代理,那么过载是微不足道的(与 apache 相比)。我确实有与您非常相似的设置(小型虚拟机、3 个旧版 apache 网站、node.js 代理和增强)。到目前为止,apache 是资源消耗者,而不是我的节点应用程序,它仍然代理/过滤/拦截每个传入的 http 请求

这是我的设置:

主代理

它处理所有传入的请求(对于任意数量的域):我个人使用nodejitsu's http-proxy,它非常强大且易于配置

var http = require('http');
var httpProxy = require('http-proxy');
var options = {

  hostnameOnly: true,
  router: {    
    'domain1.com': '127.0.0.1:8081',
    'www.domain1.com': '127.0.0.1:8081',
    'subdomain1.domain1.com': '127.0.0.1:8082',
(...)
    'domain2.com': '127.0.0.1:8090',
(...)

   }
}

var mainProxy = httpProxy.createServer(options);
mainProxy.listen(8080);

您可以直接从选项对象重定向到 apache,或者在不同端口上的另一个(中间件)节点应用程序中进行更多 url 解析。

警告:如果您不希望以“root”身份安装/运行节点(我强烈建议在生产环境中这样做):将端口 80 重定向到具有 IPTABLE 的其他端口该代理运行的指令(假设是 8080)(请参阅此处以获取 detailed example of Iptable directives)。我的,在 debian 压缩上,读取:

#REDIRECT port 80 to 8080
$IPTABLES -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

节点应用

它使用正则表达式或您需要的任何东西进行一些 URL 解析。例如:重定向到一些(旧版)apache 服务器(在我的情况下)只提供尚未由“开发中”节点应用程序提供的旧版内容。

守护进程

有几种解决方案可以让节点作为守护进程运行。我最喜欢的两个是:

  • nodemon 将监视节点应用程序文件夹和子文件夹中的所有文件以进行更改,并在文件更改时重新启动节点应用程序。非常适合开发环境
  • forever(再次由 Nodejitsu 提供)将在您的节点应用程序停止时重新启动它。这是非常可定制的。

还有:

  • init.d script:我已经为我自己的服务器编写了这个 debian init.d 脚本(应该在 ubuntu 上工作)

【讨论】:

    【解决方案2】:

    Node 真的非常快,它是为同时处理数千个连接而构建的,所以在我看来,使用它构建的代理根本不是问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-17
      • 2014-02-19
      • 2012-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-25
      相关资源
      最近更新 更多