使用负载均衡器代替代理服务器

Using Load Balancer Instead of Proxy Server

我计划 运行 同时开发 Java 网络应用程序 (www.example.com) 和 wordpress 博客 (www.example.com/blog)域名。

Tomcat 服务器提供我的 Java 网络应用内容,Apache 服务器提供 WordPress 内容。

最初,我打算使用代理服务器将所有博客请求路由到 Apache 服务器,并将所有其他请求路由到 Tomcat (http://tomcat.apache.org/tomcat-8.0-doc/proxy-howto.html)(我不确定我是如何做到的会实施,因为我还没有这样做)。

不过,我最近了解到 AWS Application Load Balancer。 使用 LB,我可以根据 url 路径将请求路由到特定端口,因此我可以使用它将所有 www.example.com/blog 请求路由到 Apache 服务器(在端口 80 上)和所有 www.example.com 请求到 Tomcat 服务器(端口 8080)。

我有什么理由不应该这样做吗?由于Application Load Balancer 是一个相对较新的产品,大多数文档都推荐使用代理服务器方案,但我看不出有什么理由不使用Application Load Balancer 方案。

谢谢。

虽然 Application Load Balancer 是对 AWS 产品套件的重要补充,但有些事情(目前)您可以使用反向代理来完成,而您不能使用 ALB - 您的选择将取决于您的需求情况需要。

一般来说,ALB 适合更简单的配置,但如果您有更复杂的配置,代理会为您提供更多控制和灵活性 rules/needs。

使用代理可以做而使用 ALB 做不到的事情

  • 根据 HTTP 标准缓存控制内置后端响应缓存 headers and/or 自定义缓存规则
    • ALB 路由请求而不缓存
    • (如果需要缓存,AWS-native 的解决方案是Cloudfront
  • 复杂的后端路由决策
    • 例如使用 nginx,您可以 select 基于请求的几乎任何方面的后端 - 使用 ALB(到目前为止)它仅基于路径(启动时最多有 10 条规则) - 尽管他们承诺会有更多
  • 任意后端
    • 代理通常允许您代理到任何 http/s 后端(例如 S3 存储桶、其他网站等)
    • 此时 ALB 似乎只提供包含 EC2 实例或 EC2 容器的目标组
  • 许多代理(例如 nginx)提供 运行ge of modules 其中任何一个都可能 helpful/useful 适合你
  • 自定义扩展性 - nginx lua module 为代理的行为提供了巨大的灵活性

使用 ALB 比代理更容易的事情

  • 更简单的配置
  • 开箱即用的高可用性
    • 如果你 运行 一个代理,你需要将代理放在它自己的缩放组和 运行 两层传统的 ELBs - 一层在代理的 ASG 前面,并且一个在每个后端的 ASG 前面(例如在该页面上搜索 Service Segmentation Using a Proxy Layer
  • API 基于供应和配置 - 如果您想动态启动新环境,更适合开发运营工作流程和 CI/CD 管道

其他参考资料

Nginx 已发布 a comparison here - 上面的列表是基于我对要点的看法 - Nginx 显然有自己的偏见,但值得回顾。