43

让 nginx 或其他 web 服务器作为反向代理在 Node.JS 前面运行有什么好处?它提供什么?

(这个问题是针对有关网络应用程序的问题,而不是网页)。

谢谢你。

4

3 回答 3

36

我认为最大的好处是您可以将同一个端口 (80) 用于多个应用程序。否则,您需要为您拥有的每个 nodejs 应用程序提供一个新的 IP 地址。根据您的设置方式,您还可以为在不同端口上运行的不同 nodejs 应用程序配置不同的文件夹和子域。如果您正在构建大型或复杂的东西,这非常棒。想象一下,能够在一个节点应用程序上运行您的 API,在另一个应用程序上运行您的网站,在另一个应用程序中运行登录网站(会员区、仪表板等)。您的负载均衡器可以确定谁需要去哪里(example.com/api* -> api.js、example.com/dashboard* -> dashboard.js、example.com -> app.js)。这不仅对缩放有用,而且当事情破裂时,并非所有东西都立即破裂。

对于成熟的事情,嗯。Nodejs +永远+ node-http-proxy = 太棒了。为您的所有应用程序运行 1 个代理服务器,配置/复杂性最低(失败的可能性更低)。然后享受其他一切的乐趣。不过,不要忘记为您的内部端口设置防火墙;)

有些人注意到负载平衡,这确实是一个好处。然而,负载平衡并不是大多数人会从中受益的东西,因为单线程、非阻塞的 nodejs 线程可以处理非常大的负载。如果我是你,我真的不会认为这有什么不同。负载平衡在您需要时很容易实现,但在您这样做之前完全无用。

另请注意,如果您使用非节点代理解决方案(nginx、龙卷风等),请确保不要使用会阻塞的代理解决方案。阿帕奇块。Nginx 没有。您不想放弃在糟糕的服务器上首先使用 nodejs 的最大好处之一。

于 2011-07-20T15:43:33.030 回答
10

拥有更成熟的软件作为代理更利于安全性和可靠性。Nginx、Apache 等已经针对大量案例进行了测试,并在生产中使用了多年。

您还可以使用这些 Web 服务器中的功能,否则您必须自己实现或使用 node.js 模块。比如缓存、统计、平衡等。

另一方面,您将失去 node.js 的一些功能、websockets 等实时功能(在端口 80 上,您仍然可以使用其他端口)、页面缓冲以及根据使用的反向代理、对缓存和标头的控制。

编辑:

于 2011-07-20T14:42:59.987 回答
1

当您特别处理 SSL 和 gzip 压缩时,反向代理确实有助于提高性能。此外,还有许多其他优点。感谢 Thomas Hunter II(内在)。在此处阅读整个博客https://medium.com/intrinsic/why-should-i-use-a-reverse-proxy-if-node-js-is-production-ready-5a079408b2ca

于 2019-05-25T08:04:14.643 回答