【问题标题】:What is the role of Apache/nginx in a Rails appApache/nginx 在 Rails 应用程序中的作用是什么
【发布时间】:2013-10-28 14:05:09
【问题描述】:

这个问题可能很明显,但我还不太明白。据我所知,Rails 应用程序是通过使用 Apache 或 nginx 之类的 Web 服务器或 Heroku 之类的云提供商来部署的。

像 Apache/nginx 这样的网络服务器的职责是什么。为什么 Rails 应用程序不是简单地通过运行 rails server 在 WEBrick 上运行。

【问题讨论】:

标签: ruby-on-rails apache nginx


【解决方案1】:

基本上,听起来你的问题是:

问:为什么不只使用 WebBrick 作为生产服务器(而不仅仅是 用于 RoR 开发)?

这里有几个很好的讨论:

来自Arch Linux documentation

虽然默认的 Ruby On Rails HTTP 服务器 (WeBrick) 很方便 对于基本开发,不建议将其用于生产用途。 通常,您应该在安装 Phusion Passenger 之间进行选择 您的网络服务器(Apache 或 Nginx)的模块,或使用专用的 应用程序服务器(例如 Mongrel 或 Unicorn)与 单独的网络服务器充当反向代理。

【讨论】:

  • 好吧,没那么多。显然,这是一种更方便的部署,当然也更快。不,这个问题更像。 Apache/nginx 完成了哪些任务?他们是否接受请求并将它们路由到运行 Rails 应用程序的 Ruby 进程?
  • 1) Ruby 是一种编程语言,2) Rails 是用 Ruby 编写的框架,3) 用户通过 Web 浏览器与 RoR 应用程序交互,4) HTTP 是用于通信的传输用户和应用程序之间。出于开发目的,Webbrick 是一个非常好的 HTTP 服务器。出于生产目的,Apache 通常是更好的选择。真的就这么简单:Apache 的“职责”就是调解 HTTP 传输层。
  • 问:您的问题得到解答了吗? Q:Apache/nginx的作用是什么?答:在 RoR 应用程序和最终用户之间提供 HTTP 传输。 webBrick、IIS 和其他一百种替代方案也是如此。也看看这个:How does PHP interface with Apache?。对于任何带有任何语言解释器(如 Ruby 解释器)的 Web 服务器,原理都是相似的。 '希望对您有所帮助...
【解决方案2】:

我可能会将您的问题重新表述为“为什么 Ruby 应用程序中有单独的 Web 和应用程序层?”

在 Ruby 应用程序的生产部署中,通常有一个 Web 层(例如 Apache 或 Nginx)和一个应用程序层(例如 Unicorn、Thin、Passenger)。 Web 层和应用层有不同的用途:

  1. Web 层 - 管理 HTTP 连接,这些连接可能是持久的和长期存在的。通常负责生产部署的一些配置(通过重写规范化 URL,阻止错误请求的类别等)。有时负责 HTTPS 终止(尤其是在没有负载平衡器的环境中)。有时负责提供静态资产,这是 Web 服务器擅长的一项任务。大多数 Web 服务器可以处理数千个并发请求,每个请求所需的资源最少。因此,如果 Web 服务器可以在不影响应用层的情况下处理请求,则最好由 Web 服务器来处理请求。

  2. 应用层 - 管理对应用本身的请求,这通常需要一定数量的应用逻辑和对数据存储层的访问。请求通常被认为是短暂的(最多几秒钟,理想情况下为几十毫秒,Rails 实时流除外)。应用程序层的并发性受到更多限制 - 大多数应用程序服务器可以处理更少数量的并发请求(瘦/独角兽每个进程 1 个)。

请注意,这种架构对于其他语言(PHP、Java)来说是相对常见的,因为这些差异在很大程度上也适用于运行这些语言的系统。

可以使用统一的 Web 和应用程序层运行,但这通常需要一个将请求与线程或进程分离的系统 - 这意味着每个并发请求都不需要线程或进程。它在开发方面增加了一些复杂性(请参阅 Node.js),但可以带来显着的可扩展性优势。

【讨论】:

    猜你喜欢
    • 2013-11-13
    • 2010-11-28
    • 2016-02-05
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2019-08-25
    • 2016-07-10
    相关资源
    最近更新 更多