ruby - 没有 nginx 的 Puma - 同一 IP 上的多个 ruby​​ 应用程序 :PORT

标签 ruby api nginx rack puma

Nginx 在生产中的重要性通常基于它为慢速客户端提供服务的能力;在 RESTful API 的设置中,它似乎是生产堆栈的一个不必要的层,尤其是 Puma(不像广泛使用的 unicorn 可以处理 nginx 工作)。

Puma can allow multiple slow clients to connect without requiring a worker to be blocked on the request transaction. Because of this, Puma handles slow clients gracefully. Heroku recommends Puma for use in scenarios where you expect slow clients. ref

如何在不使用 nginx 作为反向代理的情况下使 Puma 在同一端口上为多个 ruby​​ 应用程序提供服务?

最佳答案

你不能,Puma 是一个应用服务器。

在 TCP/IP 堆栈上,每个应用程序都被分配到一个端口,以便接收到的数据包可以代理到需要它的应用程序。想象一下,多个应用程序位于同一个端口上:应用程序无法知道接收数据包是真正针对它还是同一端口上的另一个应用程序。

这就是我们使用代理和反向代理的原因。作为反向代理的 Nginx 将请求的 URL 解析为应用程序并将请求代理给它。它是一个单一的应用程序,它接收给定端口上的所有传入数据包,然后将它们代理到另一个端口或套接字上的应用程序。

要在同一个端口上有多个 Web 服务器,您必须在它们前面有一个反向代理,例如 Nginx 或 HAproxy。

关于ruby - 没有 nginx 的 Puma - 同一 IP 上的多个 ruby​​ 应用程序 :PORT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38815051/

相关文章:

ubuntu - 如何使用已经内置的 nginx 服务器安装 pagespeed

python - 获取 ruby​​ 脚本中 python 测试的输出

ruby - 使用 Mongoid 进行全文搜索

ruby-on-rails - 在 select_tag 中,使用 options_from_collection_for_select ,如何在 ruby​​ on rails 中设置选定元素

java - 外部可执行文件的行为

swift - 使用 django-allauth 的访问 token 登录 Spotify iOS SDK

php - Nginx 运行所有 php 文件,除了 index.php

ruby - Ruby 如何知道哪个 OLE 对象是可枚举的?

javascript - 在 Javascript 的 for 循环中运行不同的 api

elasticsearch - 查询Elasticsearch时如何获取有关客户端搜索内容的统计信息?