我经常读到关于Nginx和Mongrel一起使用的报道。有人能给我解释一下它们有什么不同吗?为什么需要Mongrel?为什么让Nginx直接与许多Rails服务器通信是不可取的?
发布于 2012-10-04 18:41:48
两者都是web服务器,但它们的关注点并不相同:
HTTP本质上是一个应用服务器,它提供了一个
需要说明的是,您的rails应用程序本身并不是直接可用的,它需要一个容器(我建议您阅读一些关于http://rack.github.com/的内容),在本例中就是Mongrel。当你运行rails控制台时,通常是webrick,这是我们在Ruby中拥有的最基本的web "app“服务器(它是标准库的一部分)。
那我们为什么要在前面使用Nginx呢?让我们考虑一下我们只使用了Mongrel :我们触发了一个混合实例,监听端口80。例如,如果您的请求需要500毫秒才能完成,那么您可以每秒处理2个客户端。但等等,这显然是不够的。让我们启动另一个混合实例。但是我们不能让它监听端口80,因为它已经被第一个实例使用了,我们对此无能为力。
因此,我们需要一些可以处理多个Mongrel实例的东西,通过仍然侦听端口80。你添加了一个Nginx服务器,它会(代理)将请求分派给你的多个混合实例,现在你可以添加更多的实例来同时为更多的客户端服务。
回到回答你的问题,让NGinx与rails服务器通信,意味着触发一个或多个Mongrel (或Thin / Unicorn,任何可用的服务器),并通知NGinx它必须将请求传递给它们。除了使用Passenger之外,托管rails服务是一种流行的模式,它基本上为Apache工作人员提供了一种处理ruby代码的方法。
发布于 2012-10-04 18:19:35
Nginx和Mongrel的
差异
两者都是HTTP服务器,但它们的关注点不同。Mongrel是一个快速的HTTP服务器,主要针对基于Ruby的应用程序。它很容易用Ruby代码扩展。然而,它在静态文件服务方面并不是很好,比如它比Apache和nginx慢。此外,Rails是单线程的,这意味着在请求过程中(在实际呈现之前调用控制器方法),混合是锁定的。
为了解决上面提到的mongrel和Rails的缺点,在生产应用程序中的首选设置是将Apache或nginx作为主let服务器,如果收到对非静态Rails页面的请求,则将其传递给一些底层Mongrel,让mongrel将呈现的页面返回给Apache/nginx并提供该页面,以及静态文件,如图像/样式表/?,乍一看可能有点令人生畏和复杂,但一旦您真正实现它,它就非常强大和稳定(我有几个应用程序已经在服务器上运行了几个月到几年,没有一次重启)。归根结底,让Apache/nginx做它最擅长的事情,让混合集群做它最擅长的事情,每个人都很高兴。
选择nginx而不是Apache主要是基于内存方面的考虑。Apache是一个相当强大的you服务器,特别是如果您实际所做的只是使用它提供一些静态文件,并在一堆杂乱的服务器上平衡其余的文件。Nginx是非常轻量级和高性能的,可以做和Apache一样好的工作。但是,如果您熟悉Apache,不想掌握nginx配置,并且您的服务器上有大量内存,那么您仍然可以使用Apache。在基本的VPS上,nginx是一种更合适的方法。
为您提供更多信息
Apache vs Nginx
它们都是web服务器。它们可以服务于静态文件,但-通过正确的模块-也可以服务于动态web应用程序,例如那些用PHP编写的应用程序。Apache更流行,功能更多,Nginx更小,更快,功能更少。
Apache和Nginx都不能提供开箱即用的Rails应用程序。为此,您需要将Apache/Nginx与某种附加组件结合使用,稍后将对此进行介绍。
Apache和Nginx也可以充当反向代理,这意味着它们可以接受传入的HTTP请求,并将其转发到另一个也使用HTTP的服务器。当服务器使用HTTP响应进行响应时,Apache/Nginx会将响应转发回客户端。稍后您将了解为什么这是相关的。
Mongrel vs WEBrick
Mongrel是一个Ruby“应用服务器”。具体来说,这意味着Mongrel是一个应用程序,它:
WEBrick也做同样的事情。与Mongrel的区别:
它完全是用写的。Mongrel是Ruby的一部分,C部分;大部分是Ruby,但它的超文本传输协议解析器是用C编写的,因为performance.
中使用WEBrick
另一个属于同一类别的Ruby应用服务器是瘦服务器。虽然它在内部不同于Mongrel和WEBrick,但当涉及到使用和它在服务器堆栈中的总体角色时,它属于同一类别。
https://stackoverflow.com/questions/12724943
复制相似问题