AWS ALB 和应用程序服务器之间是否仍然需要反向代理?

AWS ALB 和应用程序服务器之间是否仍然需要反向代理?

语境

带有应用服务器的 Web 应用程序,即带有 puma 的 Ruby on Rails。使用 Fargate 在 AWS ECS 上的容器内运行。流量由 AWS 应用程序负载均衡器直接路由到在容器内运行的应用程序服务器。

问题

ALB 和应用程序本身之间是否仍需要反向代理,即作为 sidecar 容器?这样做有什么好处?

答案1

不需要反向代理,但 Rails 附带的 Web 服务器具有最少的功能,因此对于面向公众且可能增长的任何应用程序,尽早集成反向代理(例如 Nginx)是一个好主意。

例如,这将为您提供高级速率限制功能、缓存和端到端 SSL 终止功能,而且比其他 Web 服务器实现更省事。日志记录也变得更加简单,如果您的应用程序负载过大,TCP 重试之类的功能可以成为救星。

您不需要 sidecar。您可以将 Nginx 安装在与应用程序相同的盒子上。它非常高效,不会影响您的应用程序性能。

我们在 Rails 前面使用多个 Nginx 代理,每天处理数十亿个 http 请求。

Cloudflare 等大量反向代理实现也是基于 Nginx 构建的。

答案2

负载均衡器是一种反向代理。它的优点包括接受特定端口上的流量、充当防火墙,并防止某些类型的攻击到达服务器。

对于 Web 应用程序的常见情况,我看不出同时拥有负载均衡器和第二个反向代理有什么显著的好处。

相关内容