在Node.JS前面运行nginx或其他Web服务器作为反向代理有什么好处?它提供了什么?
(此问题适用于有关网络应用程序的问题,而不是网页)。
谢谢。
答案 0 :(得分:34)
我认为最大的好处是您可以将相同的端口(80)用于多个应用程序。否则,您需要为每个nodejs应用程序提供一个新的IP地址。根据您的设置方式,您还可以将不同的文件夹和子域配置为在不同端口上运行的不同nodejs应用程序。如果你正在建造一个大的或复杂的东西,这是非常好的。想象一下,能够在一个节点应用程序上运行您的API,从另一个节点应用程序运行您的网站,以及在另一个应用程序中运行登录的网站(会员区域,仪表板等)。您的负载均衡器可以确定谁需要去哪里(example.com/api* - > api.js,example.com / dashboard * - > dashboard.js,example.com - > app.js)。这不仅对缩放很有用,而且当事情中断时,并不是所有事情都会立即中断。
到成熟的事情,嗯。 Nodejs + forever + node-http-proxy =太棒了。为所有应用程序运行1代理服务器,配置/复杂度最小(失败的可能性较低)。然后享受其他一切的乐趣。不要忘记关闭内部端口的防火墙,;)
。
有些人注意到负载平衡,这是真的,是一种好处。但是,负载平衡并不是大多数人会从中受益的,因为单个线程,非阻塞nodejs线程可以处理非常大的负载。如果我是你,我真的不会认为这是一个区别。负载平衡很容易在需要时实现,但在你这样做之前完全没用。
另请注意,如果您使用非节点代理解决方案(nginx,龙卷风等),请确保不要使用阻止的解决方案。 Apache阻止。 Nginx没有。你不想丢弃在crummy服务器上首先使用nodejs的最大好处之一。
答案 1 :(得分:9)
将更成熟的软件作为代理,可以提高安全性和可靠性。 Nginx,Apache和其他公司已经针对大量案例进行了测试,并在生产中使用了多年。
您还可以使用这些Web服务器中的功能,否则您必须自己实现或使用node.js模块。像缓存,统计,平衡等
另一方面,你会丢失来自node.js的一些功能,实时功能如websockets(在端口80上,你仍然可以使用其他端口),页面缓冲和取决于所使用的反向代理,控制你的缓存和头文件
修改:
答案 2 :(得分:0)
当您特别处理SSL和gzip压缩时,反向代理确实有助于提高性能。另外,还有许多其他优点。谢谢 托马斯·亨特二世(本征)。在https://medium.com/intrinsic/why-should-i-use-a-reverse-proxy-if-node-js-is-production-ready-5a079408b2ca
处阅读整个博客