为啥我需要 Nginx 和 Puma?

Posted

技术标签:

【中文标题】为啥我需要 Nginx 和 Puma?【英文标题】:Why do I need Nginx with Puma?为什么我需要 Nginx 和 Puma? 【发布时间】:2018-11-04 02:46:13 【问题描述】:

我正在将 Rails 应用程序部署到生产环境。看起来 Puma 速度很快,可以在 Web 服务器中处理我想要的许多事情。

我想知道我是否还需要使用 nginx,如果只使用 Puma,我会错过什么?

【问题讨论】:

Why do we need nginx with thin on production setup?的可能重复 【参考方案1】:

Nginx 是 Web 服务器,puma 是应用程序服务器。 两者都有自己的优势,你需要两者。

一些例子:

静态重定向 - 您可以设置您的 nginx 以将所有 http 流量重定向到与 https 相同的 URL。这样,此类微不足道的请求将永远不会到达您的应用服务器。

分段上传 - Nginx 更适合处理分段上传。 Nginx 将合并所有请求并将其作为单个文件发送给 puma。

提供静态资产 - 建议通过网络服务器提供静态资产(Rails 中 /public/ 端点中的那些),而无需加载您的应用服务器。

nginx 内置了一些基本的 DDoS 保护。

【讨论】:

【参考方案2】:

Web 服务器和应用程序服务器之间存在显着差异。 Nginx (Web Server) 和 Puma (App Server) 将同时处理您的应用程序中的请求。

每当有来自客户端的请求时,它都会被 nginx 接收,然后转发到这里的 Puma 应用服务器。

将 nginx 作为 Web 服务器将帮助您更有效地处理多个请求。作为多线程服务器,它将请求分发到多个线程中,从而使您的应用程序更快。

正如供应商所说,您可以使用网络服务器提供静态页面,因为这将是一种更好的方法。

如果您要在 Web 应用程序中包含认证,那么您可以在此处提供从 http 到 https 的重定向,只有在重定向到 https 后才会访问应用服务器。

如果你打算使用 Puma,那么你必须确保服务器有效地使用资源,但如果你使用 nginx,那么它会自己处理它。

您可以获取更多信息here。

【讨论】:

答案中的链接指的是陈旧的数据,服务器的描述是在 2010 年编写的,并在 2013 年更新(不完全)。从那时起情况发生了很大变化。

以上是关于为啥我需要 Nginx 和 Puma?的主要内容,如果未能解决你的问题,请参考以下文章

Puma 和 Nginx 502 Bad Gateway 错误(Ubuntu Server 14.04)

使用 Nginx、Puma 和 Redis 部署 Rails 5 Action Cable

使用 puma nginx 和 capistrano 设置 ROR 应用程序

使用 SSL 和 Nginx 运行 Puma

运行 Puma 和 Nginx 的带有 AWS Elastic Beanstalk 的 Rails 应用程序 502

工人 puma 日志提前终止是啥意思,为啥会发生?