这是一个非常菜鸟的问题,因为我从来没有真正理解过它,所以我想要一个解释:
- 什么是“Thin”(或“Passenger”或其他替代品)?
- Thin(或其他替代方案)的用途是什么?
- 为什么我需要将 Thin (或其他替代品) 与 Apache (或 Nginx 或其他替代品) 一起使用?
- 没有 Apache(或其他替代品)可以使用 Thin(或其他替代品)吗?
- Thin (或其他替代品) 和 Apache (或其他替代品) 之间有什么区别?
眼下,我目前对这个问题的理解(有限且可能错误)是....Apache 是一个 http web 服务器(在这种情况下,它充当反向代理(?)),而 Thin 是一个 ruby web 应用服务器。它们为什么是这样的以及它们是如何工作的我有点不明白。
互联网上的措辞也可能非常令人困惑(例如,Web 服务器与 Web 应用服务器等......(有点像“主机”或“主机名”可能非常令人困惑))。如果我在网上找到的所有阅读材料对我来说都不是很清楚,我该去哪里发展我对正在解决问题的“最低限度的理解”?
答案1
Thin、Passenger、WEBrick 或任何其他此类 Web 服务器都只有一个目的。它从网络接收 HTTP 请求并将其传递给架子,并将应用程序的响应返回到网络上。
(通常,Rack 是使用 Rails 或 Sinatra 等框架编写的完整 Ruby 应用程序的一个组件。它通过自己的中间件并确保它们被路由到正确的应用程序代码。)
Thin 将请求发送给 Rack 之后会发生什么通常不是 Thin 关心的;而是应用程序和应用程序开发人员关心的。
Ruby Web 服务器通常位于更传统的 Web 服务器(如 Apache 或 nginx)后面,其原因在于性能。Ruby Web 服务器是用 Ruby 编写的,并针对其所服务的应用程序堆栈进行了优化。特别是,它不一定擅长快速提供静态资产。在通常的生产设置中,传统的 Web 服务器将提供静态资产,而Rails 在部署期间或首次访问时作为 rake 任务进行预编译,而 Thin(或您选择的服务器)会将其他所有内容传递给应用程序。因此,单独运行 Thin 仅在开发环境中有用,因为那里的性能通常不是问题。我们不会这样做。(通常 WEBrick 用于此目的,因为它是 Rails 应用程序的默认 Web 服务器。)
作为系统管理员,我们通常不关心应用程序代码,但在某些情况下,您需要与开发人员一起评估应该将几个可能的 Ruby Web 服务器中的哪一个用于给定应用程序。但作为一般规则,从应用程序的角度来看,它们应该是可互换的。