2011-07-20 43 views
37

什么是具有nginx的或运行,如Node.js的前反向代理的另一个Web服务器的优势,前反向代理的?它提供了什么?优势在Node.js的

(这个问题是用于关于网络的应用程序,而不是网页的页面事宜)。

谢谢。

+0

我最近对自己一直很好奇。好问题。 –

+0

谢谢戴夫。伟大的思想家认为他们都说,但我想,我们很好奇。 ;-) – Phil

回答

33

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

对于成熟的东西,meh。 Nodejs + forever + node-http-proxy =令人惊叹。以最小的配置/复杂性为您的所有应用运行1代理服务器(失败的可能性较低)。然后与其他一切玩得开心。不要忘记关闭内部端口的防火墙,尽管;)

有些人记下负载平衡,这是真的,这是一个好处。但是,负载均衡并不是大多数人会从中受益的,因为单线程,非阻塞的nodejs线程可以处理相当大的负载。如果我是你,我甚至不会认为这是一个差异。当你需要时,负载平衡很容易实现,但在你做之前完全没用。

另外请注意,如果你去一个非节点代理解决方案(nginx的,龙卷风等),只是确保不使用一个块。 Apache块。 Nginx没有。你不想丢弃在一台不起眼的服务器上首先使用nodejs的最大好处之一。

+0

你好,谢谢你的回应和解释,这是非常鼓舞人心的,包含伟大的想法。 如果nodee只在一台机器上运行,您可以告诉我们“node-http-proxy”的用例是什么?那么它会做什么? – Phil

+0

如果它只在一台机器上运行,那么它只是充当本地代理(就像Apache或Nginx会使用Node一样),除了它也构建在节点上! '')'这意味着您可以完全控制您的仅节点堆栈,您的应用程序不需要修改(它们只是工作),并且可以在单个IP地址/端口(80)上运行许多,许多,多个应用程序。对于更复杂的设置,您可以构建自己的负载均衡器(如何酷!),并按照适合您的应用程序的方式分发工作。 – 2011-07-22 09:26:42

+0

对!这听起来真棒。干杯! – Phil

9

拥有更成熟的代理软件更有利于安全性和可靠性。 Nginx,Apache等已经过多种测试,并在生产中使用了多年。

您也可以使用从功能,否则你就必须自己实现或使用Node.js的模块,这些Web服务器。像缓存,统计,平衡等

另一方面,你会失去node.js的一些功能,实时功能,如websockets(在端口80,你仍然可以使用其他端口),页面缓冲和取决于使用反向代理,控制缓存和标题。

编辑:

+0

你好,这是绝对有道理的。感谢您分享这个伟大的解释。你能否解释一下,在这种情况下,我们在谈论什么样的安全性和可靠性优势? – Phil

+0

安全性和可靠性优势来自于这些程序比较旧,并且已经在生产中使用的时间超过了node.js,通常这意味着已经尝试了更多的用例,并修复了可能的错误。这是一个普遍的规则,但也有例外。恕我直言,你可以在没有反向代理的情况下使用node.js,只需谨慎使用你的代码并始终保留最新版本。 –

+3

然后编写可靠的代码。通常,安全问题与您的Web服务器无关,而与应用程序无关。因此,如果您编写不安全的代码,那么它不是nodejs的缺陷,只不过是人们编写不好的PHP时出现的Apache错误。记住这一点很重要,也是大多数人出错的地方。 – 2011-07-22 09:29:01