用于多个 Web 应用程序的弹性负载均衡器

the*_*met 13 amazon-web-services amazon-elb

我有网络应用程序N。每个 web 应用程序由我域中的不同主机名提供服务,并部署到在 AWS 中运行的 2 个实例。换句话说,我有2N实例,分为运行N不同 web 应用程序的对。

我想设置一个 AWS Elastic Load Balancer,它将根据Host标头将请求代理到为其提供服务的两个实例之一。是否可以使用单个 ELB 或者我需要部署NELB,每对实例一个?

Mic*_*bot 19

单个 ELB 将流量路由到一组实例,并将传入流量分发到它“后面”的所有实例。它不会根据对流量的任何第 7 层分析(例如Host:标头)来选择性地路由流量。

你需要一个ELB每个实例。正如您所描述的,每个 Web 应用程序都有一个 ELB。

如果您运行 ELB 的主要目的是使用通配符证书卸载 SSL(我有一个这样设计的系统,其中有数十个应用程序位于 many-different-domains.my-wildcard-cert-domain.com),那么实例ELB 的“后面”可能运行一个反向代理,比如 HAProxy(或其他几个替代方案,比如 Varnish),它可以做出第 7 层路由决策,然后将流量转发到它们后面的适当机器子集,这也允许更复杂的负载平衡,并具有为您提供统计和流量计数器的优势,聚合和分离。

       /-- HAProxy \  /----- instances hosting app #1  
ELB ---|            >> ----- instances hosting app #2 
       \-- HAProxy /  \----- instances hosting app #n 
Run Code Online (Sandbox Code Playgroud)

中间 ^^^^ 实例可以评估Host:标头(除其他外),甚至可以在其日志中捕获会话 cookie 的值以进行分析。

此设置还允许我在适当的情况下在重叠的实例子集上运行多个应用程序,并执行 ELB 本身不直接支持的许多其他操作。在应用程序过载或以其他方式变得不可用的情况下,它还会返回一个自定义的“503”页面,ELB 不会自行执行此操作。我在这里描述了 2 个代理服务器,除了您提到问题中的数字 2 之外,没有其他特殊原因。我的设置实际上有 3 个,一个用于部署该区域的每个可用区。

  • 2016 年 8 月,亚马逊推出了 [AWS Application Load Balancer](https://aws.amazon.com/blogs/aws/new-aws-application-load-balancer/),它允许根据 HTTP 标头路由到不同的目标组。 (3认同)
  • @JensBannmann 这是真的。当他们发布它时,它支持的唯一路由规则是基于路径的。2017 年,他们添加了基于 `Host:` 标头进行路由的功能。这个答案在我 2014 年写的时候是正确的,但看起来是时候更新了。谢谢你让我注意到它。 (2认同)