为什么我需要在Puma中使用Nginx?

38

我正在将一个Rails应用程序部署到生产环境。看起来Puma快速且处理了我想要的Web服务器的许多功能。

我在想,如果只使用Puma,是否需要去烦恼Nginx,以及如果不使用Nginx会错过哪些内容?


2
可能是以下问题的重复:为什么在生产环境中使用thin还需要nginx? - Greg
2个回答

51

Nginx是一个Web服务器,而Puma则是一个应用服务器。 两者都有各自的优势,你需要同时使用它们。

以下是一些例子:

  • 静态重定向 - 你可以设置Nginx将所有http流量重定向到相同的https网址。这样这些琐碎的请求就永远不会影响你的应用服务器。

  • 多部分上传 - Nginx更适合处理多部分上传。Nginx将汇总所有请求并将其作为单个文件发送给Puma。

  • 提供静态资产 - 建议通过Web服务器来提供静态资产(在Rails中的/public/端点),而无需加载你的应用服务器。

  • Nginx内置了一些基本的DDoS保护措施。


我想要使用nginx和puma,应该怎么做? - wokerman
1
@wokerman,你可以查看这篇文章:在Ubuntu 18中设置Nginx,为使用Puma的Ruby on Rails应用程序提供支持 - Masroor
如果您使用Cloudflare设置您的网站,您可以跳过Nginx。因为CF可以将HTTP重定向到HTTPS,并且静态资源被缓存。当更改时,资产只会加载一次。 - Kartikey Tanna

13

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

当客户端发送请求时,它将被nginx接收,然后转发到应用服务器Puma。

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

正如vendant所述,你可以使用Web服务器提供静态页面来实现更好的效果。

如果要向您的Web应用程序中添加认证,则可以在此处提供从http到https的重定向,这将在重定向到https后仅命中应用程序服务器。

如果您要使用Puma,则必须确保服务器有效使用资源,但如果您使用nginx,则它会自行处理。

您可以在这里获取更多信息。


3
答案中的链接内容已经过时,服务器的描述是在2010年编写的,并在2013年进行了(不完全的)更新。自那时以来,情况发生了很大变化。 - Myst

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接