什么是 Thin,为什么我需要它

age*_*eur 7 web-server thin apache-2.4

这是一个非常菜鸟的问题,因为我从来没有真正理解它,我想解释一下:

  • 什么是瘦(或乘客或其他替代品)?
  • Thin(或其他替代方案)的目的是什么?
  • 为什么我需要 Thin(或其他替代品)和 Apache(或 Nginx 或其他替代品)?
  • 可以在没有 Apache(或其他替代品)的情况下使用 Thin(或其他替代品)吗?
  • Thin(或其他替代品)和 Apache(或其他替代品)之间有什么区别?

目前,我目前(有限且可能错误)对问题的理解是....Apache 是一个 http Web 服务器(在这种情况下就像一个反向代理(?)),而 Thin 是一个 ruby​​ Web 应用程序服务器。为什么它们是它们的样子以及它们的工作方式多少让我有些回避。

互联网上的措辞也可能非常混乱(例如,Web 服务器与 Web 应用程序服务器,等等……(有点像“主机”或“主机名”可能会非常混乱))。如果我在网上找到的所有阅读材料对我来说都不是很清楚,我可以去哪里发展我的“对正在解决的问题的最小理解”?

Mic*_*ton 10

Thin、Passenger、WEBrick 或任何其他此类 Web 服务器具有单一目的。它接受来自网络的 HTTP 请求并将其传递给Rack,并将应用程序的响应返回到网络上。

(通常,Rack 用作使用 Rails 或 Sinatra 等框架编写的完整 Ruby 应用程序的一个组件。它通过自己的中间件处理传入的 HTTP 请求,并确保它们被路由到正确的应用程序代码。)

Thin 将请求发送到 Rack 之后,请求会发生什么变化,通常不是 Thin 关心的;这是应用程序和应用程序开发人员的关注点。

Ruby Web 服务器通常放置在更传统的 Web 服务器(例如 Apache 或 nginx)后面的原因是为了提高性能。Ruby Web 服务器是用 Ruby 编写的,并经过优化以处理它所服务的应用程序堆栈。特别是,它不一定非常擅长快速服务静态资产。在通常的生产设置中,传统的 Web 服务器将提供静态资产,Rails 在部署期间或首次访问时将其作为 rake 任务进行预编译,并且 Thin(或您选择的服务器)会将其他所有内容传递给应用程序。因此,单独运行 Thin 仅在开发环境中有用,因为性能通常没有问题。这不是我们会做的事情。(通常 WEBrick 用于此目的,因为它是 Rails 应用程序的默认 Web 服务器。)

作为系统管理员,我们通常不关心应用程序代码,但在某些情况下,您会希望与开发人员一起评估给定应用程序应该使用几种可能的 Ruby Web 服务器中的哪一种。虽然作为一般规则,从应用程序的角度来看,它们应该是可以互换的。