gpt4 book ai didi

ruby-on-rails - Nginx 和 Mongrel 的区别?

转载 作者:行者123 更新时间:2023-12-04 00:06:07 25 4
gpt4 key购买 nike

我经常读到 Nginx 和 Mongrel 一起使用。有人可以向我解释它们有何不同吗?为什么需要 Mongrel?为什么不建议让 Nginx 直接与许多 Rails 服务器通信?

最佳答案

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

  • Mongrel 基本上是一个提供 HTTP 接口(interface)的 ruby​​ 应用程序服务器。它只做一件事,接受一个请求,将它传递给你的 ruby​​ 代码,然后在 http 中返回答案。它不处理并发性或任何与性能相关的功能。一个 mongrel 意味着有一个 ruby​​ 进程可以处理请求。
  • Nginx 是一个功能齐全的 Web 服务器,旨在实现性能。它可以在静态文件上提供高性能,并且不能直接处理 Ruby、Python 或任何其他语言。它依靠 FastGCI 或代理到其他应用程序服务器来做到这一点。

  • 需要明确的是,你的 rails 应用程序本身不能直接使用,它需要你可以称之为容器的东西(我建议你阅读一些关于 http://rack.github.com/ 的内容),在这种情况下是 Mongrel。当您运行 rails 控制台时,它通常是 webrick,这是我们在 Ruby 中拥有的最基本的网络“应用程序”服务器(它是标准库的一部分)。

    那我们前面为什么要用Nginx呢?假设我们只使用 Mongrel :我们触发一个 mongrel 实例,监听端口 80。如果您的请求需要例如 500 毫秒才能完成,那么您每秒只能处理 2 个客户端。但是等待显然是不够的。让我们启动另一个杂种实例。但是我们不能让它监听端口 80,因为它已经被第一个实例使用了,我们对此无能为力。

    所以我们需要一些可以处理多个 Mongrel 实例的东西,仍然监听端口 80。你扔进一个 Nginx 服务器,它将(代理)将请求分派(dispatch)到你的许多 Mongrel 实例,你现在可以添加更多实例来提供更多服务客户同时。

    回到回答您的问题,让 NGinx 与 Rails 服务器通信,意味着触发一个或多个 Mongrel(或 Thin/Unicorn,无论可用的服务器)并通知 NGinx 它必须将请求传递给它们。在使用Passenger 之后托管rails 服务是一种流行的模式,它基本上为Apache 工作人员提供了一种处理ruby 代码的方法。

    关于ruby-on-rails - Nginx 和 Mongrel 的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12724943/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com