Puma 有类似 Apache 的 "Location" 标签吗?

Does Puma have something like Apache's "Location" tag?

我正在使用 Puma(版本 3.11.0)作为 Rails 应用程序(Rails 版本 5.1.4)的 Web 服务器。我需要对整个应用程序进行 SSL 加密,但我需要一个特定的路由也将 SSL "verify_mode" 设置为对等。在 Apache 中,我通常会使用 "Location" 或 "LocationMatch" 块来配置不同于站点其余部分的 SSL 选项。

我怎样才能用 Puma 做同样的事情?

Puma 不太可能支持这个。

但是您可以将 Nginx 或 Apache 配置为反向代理,以便将请求转发到 Puma 应用服务器,并且您可以根据需要配置 SSL 选项。

我完全同意@user3309314。

将 Puma 直接暴露在互联网上(或暴露任何应用服务器,就此而言)并不是一个好主意。

Web 服务器(与应用程序服务器不同)被设计为位于前端,保护应用程序服务器免受残酷世界的侵害...

...并且在整个过程中,他们应该是处理 SSL/TLS(以及 DoS 攻击和其他烦人的问题)的人。

因此,请使用 nginx 或 apache 将请求转发到您的 Ruby 应用程序,如果您需要针对特定​​路径的特殊 TLS/SSL 规则,请使用 nginx 或 apache。

Puma 不(恕我直言,也不应该)支持您所询问的功能。

EDIT(评论中给出的部分信息+解释)

最好将应用程序服务器视为主机路由层 (nginx/apache) 和应用程序之间的 "bridge"。

它是主机路由层 (nginx/apache) 过滤并将某些主机名和路径路由到某些应用程序(或具有不同 headers / 变量 / 要求的相同应用程序)。

应用程序服务器的工作是在主机路由层和实际应用程序之间简单地 "bridge",在不同的数据格式之间进行转换(HTTP 数据到 Ruby objects 和返回) .

为了支持您所询问的功能,应用程序服务器应执行与主机路由层相同的功能(将正确的主机名/路径路由到具有正确更改的正确应用程序)

这将违反任何 "separation of concerns" 并增加系统冗余,造成性能损失(更不用说在不同模块中重复相同任务的更大代码库)。

这就是为什么,恕我直言,这些功能应该编码到Ruby应用程序服务器中。