使用Apache运行node.js会导致性能下降太多吗?

时间:2011-11-07 19:55:04

标签: apache node.js proxy

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

  1. 在端口9000上运行Apache

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

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

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

    谢谢,

2 个答案:

答案 0 :(得分:7)

性能下降

恰恰相反。如果您对节点所做的只是代理,那么重载是无关紧要的(与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服务器(在我的情况下)仅提供尚未由'in developement'节点应用程序提供的旧内容。

Daemonisation

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

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

另外:

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

答案 1 :(得分:1)

节点非常快,它可以同时处理数千个连接,因此在我看来,使用由它构建的代理根本不会成为问题。