首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nginx和Mongrel之间的区别?

Nginx和Mongrel之间的区别?
EN

Stack Overflow用户
提问于 2012-10-04 18:07:41
回答 2查看 5.1K关注 0票数 12

我经常读到关于Nginx和Mongrel一起使用的报道。有人能给我解释一下它们有什么不同吗?为什么需要Mongrel?为什么让Nginx直接与许多Rails服务器通信是不可取的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-04 18:41:48

两者都是web服务器,但它们的关注点并不相同:

HTTP本质上是一个应用服务器,它提供了一个

  • 接口。它只做一件事,接受一个请求,把它传递给你的ruby代码,然后用http返回结果。它不处理并发,也不处理任何与性能相关的特性。一个混合意味着有一个ruby进程来处理请求。
  • Nginx是一个功能齐全的web服务器,旨在提高性能。它可以在静态文件上提供高性能,并且不能直接处理Ruby、Python或任何其他语言。它依赖于FastGCI或代理到其他应用服务器来实现这一点。

需要说明的是,您的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代码的方法。

票数 22
EN

Stack Overflow用户

发布于 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是一个应用程序,它:

  1. 在它自己的进程空间中加载你的Rails应用,
  2. 设置一个TCP套接字,允许它与外部世界(例如互联网)通信。Mongrel监听此套接字上的HTTP请求,并将请求数据传递给Rails应用程序。然后,Rails应用程序返回一个对象,该对象描述HTTP响应应该是什么样子,Mongrel负责将其转换为实际的HTTP响应(实际字节),并通过套接字将其发送回。

WEBrick也做同样的事情。与Mongrel的区别:

它完全是用写的。Mongrel是Ruby的一部分,C部分;大部分是Ruby,但它的超文本传输协议解析器是用C编写的,因为performance.

  • WEBrick速度慢,健壮性差。它有一些已知的内存泄漏和一些已知的超文本传输协议解析problems.
  • WEBrick通常只在开发期间用作默认服务器,因为WEBrick默认包含在Ruby中。Mongrel需要单独安装。没有人在生产environments.

中使用WEBrick

另一个属于同一类别的Ruby应用服务器是瘦服务器。虽然它在内部不同于Mongrel和WEBrick,但当涉及到使用和它在服务器堆栈中的总体角色时,它属于同一类别。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12724943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档