这是一个非常菜鸟的问题,因为我从来没有真正理解它,所以我想要一个解释:
- 什么是瘦(或乘客或其他替代品)?
- Thin(或其他替代方案)的目的是什么?
- 为什么我需要带有 Apache(或 Nginx 或其他替代方案)的 Thin(或其他替代方案)?
- 可以在没有 Apache(或其他 alt.)的情况下使用 Thin(或其他 alt.)吗?
- Thin(或其他替代品)和 Apache(或其他替代品)之间有什么区别?
目前,我对这个问题的当前(有限且可能是错误的)理解是……Apache 是一个 http Web 服务器(在这种情况下就像一个反向代理(?)),而 Thin 是一个 ruby Web 应用程序服务器。为什么他们是他们是什么以及他们如何工作在某种程度上让我回避了。
互联网上的措辞也可能非常令人困惑(例如,Web 服务器与 Web 应用程序服务器等等......(有点像“主机”或“主机名”可能非常令人困惑))。如果我在网上找到的所有阅读材料对我来说都不是很清楚,我可以去哪里发展我的“对正在解决的问题的最小理解”?
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 服务器中的哪一个应该与给定应用程序一起使用。尽管作为一般规则,从应用程序的角度来看,它们应该是可互换的。