Nginx在生产中的重要性通常基于其为慢客户服务的能力;在RESTful API的设置中,它似乎是生产堆栈的一个不必要的层,特别是作为Puma(与广泛使用的独角兽不同,可以处理nginx工作)。
Puma可以允许多个慢速客户端进行连接,而无需在请求事务上阻止工作程序。因此,Puma优雅地处理慢客户端。 Heroku建议Puma用于您期望慢客户端的情况。 ref
如何在不使用nginx作为反向代理的情况下,让Puma在同一端口上提供多个ruby应用程序?
答案 0 :(得分:5)
你不能,Puma只是一个网络服务器。
在TCP / IP堆栈上,每个应用程序都被分配到一个端口,以便收到的打包可以代理到期望它的应用程序。想象一下,如果多个应用程序存在于同一端口上。应用程序无法知道它收到的数据包是真的用于它还是用于同一端口上的其他应用程序。
这就是我们使用代理和反向代理的原因。作为反向代理的Nginx将请求的URL解析为应用程序并将请求代理到它。它是一个应用程序,它接收给定端口上的所有传入数据包,然后将它们代理到另一个端口或套接字上的应用程序。
要在同一端口上安装多个Web服务器,您必须在它们前面安装反向代理,例如Nginx或HAproxy。