请告诉我,最好用于部署nodejs应用程序nginx或node-http-proxy。什么是最强大的?
我需要的基本功能是
答案 0 :(得分:31)
以下是关于该主题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网站,那么面对Nginx 80就是更标准的做法。话虽如此,Nginx没有理由不能在80上使用node-http-proxy安装到端口8080,并且根据所需的CGI语言代理流量。这是我首选的配置以及我目前在生产中运行的配置。到目前为止我很高兴。它快速,强大,我仍然可以支持我的客户在我自己的nodejs应用程序中使用websockets和ssl在RapidWeaver中构建站点。
哦,使用node-http-proxy进行负载均衡是一件小事......看看这个简单的Round-Robin示例https://github.com/nodejitsu/node-http-proxy/blob/master/examples/balancer/simple-balancer.js
编辑:
我发现在端口80上运行node-http-proxy是不好的做法,因为它要求root用户执行节点。而是使用IP表将端口80重新路由到运行node-http-proxy的非特权端口。更好的设置是将清漆放在80上(因为正如文章所说,任何严肃的Web应用程序都应该在它前面有一个HTTP加速器)并将请求转发给非特权端口上的node-http-proxy。从这里开始,您可以根据自己的需要在节点服务器和nginx之间分配流量。
第二次编辑:
Nginx现在支持websockets!虽然节点的当前状态非常能够提供完整的堆栈,但这并不意味着它应该。我的意思是,从技术上讲,你可以用一把螺丝刀的把手钉在墙上......但是如果你有一把锤子坐在那里,你为什么要这样?从服务静态到复杂的负载平衡,Nginx在一些最先进的网络中进行了战斗测试和部署。现在已经添加了websocket支持,这简直是一件容易的事。
答案 1 :(得分:1)
由于我们不得不绕过中国互联网墙,恕我直言,我被迫在生产中使用node-http-proxy,它相当强大,灵活。
最近,我正在考虑在其他领域使用它,所以我谷歌并获得以下测试
https://github.com/observing/balancerbattle
根据测试,似乎node-http-proxy是最慢的。但是,我认为性能差异并不大,而且它也证明了node-http-proxy也很健壮。在使用node-http-proxy时,我可以纯粹使用nodejs并使用很少的包构建一个环境。(我们使用FreeBSD,我讨厌构建很多我们从不需要的包。)
在使用node-http-proxy时,您正在编写自己的代理服务器,因此您可以尽可能多地自定义逻辑。实际上没有必要使用nginx或haproxy来获得更好的性能。