17

请告诉我,部署 nodejs 应用程序 nginx 或 node-http-proxy 最好使用什么。什么是最健壮的?

我需要的基本功能是

  • 将所有请求代理到非 80 帖子
  • 负载均衡器
  • Websocket 支持
4

2 回答 2

35

这是一篇关于该主题的精彩文章http://www.exratione.com/2012/07/proxying-websocket-traffic-for-nodejs-the-present-state-of-play/

就我个人而言,我在这个领域玩过很多配置,这一切都归结为你需要什么以及你需要在哪里部署。如果您在自己的硬件(或云切片等)上并且只需要支持 Node,那么端口 80 上的 node-http-proxy 非常强大、健壮,并且允许您利用 websockets 和 ssl 等技术有点头疼。

但是,如果您有其他需要支持的站点,例如 Drupal 或 Grails 站点,则在 80 上面向 Nginx 是更标准的做法。话虽如此,Nginx 没有理由不能在 80 上使用 node-http-proxy 安装到端口 8080,并根据所需的 CGI 语言代理流量。这是我的首选配置,也是我目前在生产中运行的配置。到目前为止我很高兴。它快速、强大,我仍然可以支持我的客户在 RapidWeaver 中构建站点以及我自己的使用 websockets 和 ssl 的 nodejs 应用程序。

哦,使用 node-http-proxy 进行负载平衡是小菜一碟...查看这个简单的循环示例https://github.com/nodejitsu/node-http-proxy/blob/master/examples/balancer/简单平衡器.js

编辑:

我发现在端口 80 上运行 node-http-proxy 是不好的做法,因为它需要 root 用户来执行 node。相反,使用 IP 表将端口 80 重新路由到运行 node-http-proxy 的非特权端口。更好的设置是将 varnish 放在 80 上(因为正如文章所说,任何严肃的 Web 应用程序前面都应该有一个 HTTP 加速器)并将请求转发到非特权端口上的 node-http-proxy。从这里开始,由您决定如何在节点服务器和 nginx 之间分配流量。

第二次编辑:

Nginx 现在支持 websockets!虽然节点的当前状态非常有能力提供完整的堆栈,但这并不意味着它应该这样做。我的意思是,从技术上讲,您可以使用螺丝刀的手柄将钉子敲入墙壁……但是如果您将锤子放在那里,您为什么要这样做?从服务静态到复杂的负载平衡,Nginx 已经过实战测试并部署在一些最先进的网络中。现在已经添加了 websocket 支持,这很简单。

于 2012-11-09T15:04:38.047 回答
4

由于我们必须绕过中国互联网墙,我被迫在生产中使用 node-http-proxy,恕我直言,它非常健壮、灵活。

最近在考虑在其他领域更多地使用它,所以我谷歌并得到以下测试

https://github.com/observing/balancerattle

根据测试,node-http-proxy 似乎是最慢的。但是,我认为性能差异并不大,这也证明了 node-http-proxy 也很健壮。在使用 node-http-proxy 时,我可以纯粹使用 nodejs 并构建一个只有几个包的环境。(我们使用 FreeBSD,我讨厌构建很多我们永远不需要的包。)

在使用 node-http-proxy 时,您正在编写自己的代理服务器,因此您可以尽可能多地自定义逻辑。确实没有必要使用 nginx 或 haproxy 来获得更好的性能。

于 2014-12-30T18:05:49.813 回答