0

我目前有几个在 Apache 反向代理后面运行的应用程序。我这样做是因为我有一个用于多台服务器的公共 IP 地址。我使用 VirtualHosts 将正确的应用程序代理到正确的服务。例如:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName nagios.myoffice.com

    ProxyPass /  http://nagios.myoffice.com/
    ProxyPassReverse / http://nagios.myoffice.com/
</VirtualHost>

这适用于 PHP、Django 和 Rails 等应用程序,但我想开始尝试使用 Node.js。

我已经注意到 Apache 代理后面的应用程序无法处理像我直接访问它们时那样高的负载。很可能是因为 Apache 配置不理想(可能没有足够的同时连接)。

我想在 node.js 中试验的最酷的功能之一是 socket.io 功能,我担心它会真正暴露性能问题。特别是因为,据我了解,socket.io 将保持我宝贵的少数 Apache 连接之一不断打开。

你能推荐一个我可以在这种情况下使用的反向代理服务器,它可以让我使用多个虚拟主机,并且不会过多地扼杀 node.js 应用程序的性能或妨碍 socket.io 实验吗?

4

2 回答 2

1

I recommend node-http-proxy. Very active community and proven in production.

FEATURES

  • Reverse proxies incoming http.ServerRequest streams
  • Can be used as a CommonJS module in node.js
  • Uses event buffering to support application latency in proxied requests
  • Reverse or Forward Proxy based on simple JSON-based configuration
  • Supports WebSockets
  • Supports HTTPS
  • Minimal request overhead and latency
  • Full suite of functional tests
  • Battled-hardened through production usage @ [nodejitsu.com][0]
  • Written entirely in Javascript
  • Easy to use API

Install using the following command

npm install http-proxy

Here is the Github page and the NPM page

于 2012-07-12T17:54:00.160 回答
0

虽然这引入了一项新技术,但我建议使用 nginx 作为前端。nginx 是一个用 c 语言编写的快速且坚固的服务器,非常擅长反向代理。像节点一样,它是事件驱动的和异步的。

您可以使用 nginx 将请求转发到您正在运行的各种 nodejs 服务器,可以是负载平衡,也可以取决于 url(因为它可以执行诸如重写之类的操作)。

于 2012-07-12T19:59:49.513 回答