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

标签 apache node.js proxy

我正在尝试在同一个 Amazon EC2 实例上运行 Apache 和 node.js。上网查资料后,想到了以下解决方案:

  1. 在端口 9000 上运行 Apache

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

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

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

谢谢,

最佳答案

性能下降

恰恰相反。如果您对 Node 所做的一切都是代理,那么过载是微不足道的(与 apache 相比)。我确实有一个与你的设置非常相似的设置(小型虚拟机、3 个遗留的 apache 网站、node.js 代理和增强)。到目前为止,apache 是资源消耗者,而不是我的 Node 应用程序,它仍然代理/过滤/拦截每个传入的 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,或者在不同端口上的另一个(中间件) Node 应用程序中进行更多 url 解析。

警告:如果您不想以“root”身份安装/运行 Node (我强烈建议在生产环境中这样做):使用 IPTABLE 将端口 80 重定向到其他端口该代理运行的指令(假设为 8080)(参见此处的 detailed example of Iptable directives )。我的,在 debian squeeze 上,写着:

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

Node 应用

用正则表达式或任何你需要的东西做一些 URL 解析。例如:重定向到一些(遗留的)apache 服务器,这些服务器(在我的例子中)仅服务于“开发中” Node 应用程序尚未提供的遗留内容。

守护进程

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

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

还有:

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

关于apache - 使用 Apache 运行 node.js 会导致性能下降吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8041792/

相关文章:

php - .htaccess 重写两个或多个 PHP 文件的规则

apache - htaccess https 到 http 重定向 - 仅适用于所有网址

java - 线程 "main"java.lang.Error 中出现异常 LUCENE

c# - Node.js TCP传入消息拆分成包

node.js - 如何使用 MongoDB 和 Node.js 根据用户输入从多级文档中过滤记录?

internet-explorer - Intranet 页面上的 IE 兼容模式问题(仅限内部,外部工作正常)

python - Django : Timeout when reading response headers from daemon process 的 mod_wsgi 错误

node.js - 安装包时如何强制 npm 使用不同的 node-gyp 版本?

android-studio - 使Gradle忘记代理

java - 当实体被代理时的代理模式?