我经常读到有关Nginx和Mongrel一起使用的信息。有人可以向我解释它们的不同之处吗?为什么需要杂种?为什么不建议让Nginx直接与许多Rails服务器通信?
最佳答案
两者都是Web服务器,但是它们没有相同的关注点:
需要明确的是,Rails应用程序本身不能直接使用,它需要可以称为容器的容器(我建议您阅读有关http://rack.github.com/的内容),在本例中为Mongrel。当您运行Rails控制台时,通常是webrick,这是我们在Ruby中拥有的最基本的Web“应用”服务器(它是标准库的一部分)。
那为什么要在前面使用Nginx呢?考虑到我们仅使用Mongrel:我们触发一个mongrel实例,监听端口80。例如,如果您的请求需要500毫秒才能完成,则您每秒可以处理2个客户端。但是,等待显然还不够。让我们开另一个杂种。但是我们不能让它在端口80上监听,因为它已经被第一个实例使用,并且我们对此无能为力。
因此,我们需要在前端需要一些东西,通过仍然监听端口80来处理多个Mongrel实例。您抛出了一个Nginx服务器,它将(代理)将请求分派(dispatch)到您的多个Mongrel实例,现在您可以添加更多实例以提供更多服务客户同时进行。
回到回答您的问题,让NGinx与Rails服务器通信,意味着触发一个或多个Mongrel(或Thin/Unicorn,无论可用的服务器是什么),并通知NGinx必须将请求传递给它们。这是一种流行的模式,除了使用Passenger之外,还托管了Rails服务,这基本上为Apache worker 提供了一种处理ruby代码的方法。
关于ruby-on-rails - Nginx和Mongrel之间的区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12724943/