ELB可以根据URL重定向请求吗?

时间:2012-05-11 07:28:59

标签: amazon-web-services load-balancing amazon-elb

我正在尝试在Amazon Elastic Load Balancer后面设置我的应用程序服务器。我想有一个专用于旧版本的服务器,以及专用于新版本的所有其他服务器。我想在路径参数中使用版本ID来实现它

e.g。

当前版本(3.0):http://example.com/APPNAME/service

旧版本(2.2):http://example.com/APPNAME/v2.2/service

我想知道:

  1. ELB是否有能力查看HTTP请求?
  2. ELB可以根据URL路径参数重定向请求吗?

3 个答案:

答案 0 :(得分:53)

更新2017-04-05

去年夏天推出具有基于路径的路由支持的新应用程序负载均衡器后(请参阅前面的更新),AWS现在还添加了Host-Based Routing Support for AWS Application Load Balancers

  

[...]您现在可以创建路由传入的应用程序负载均衡器规则   基于Host标头中指定的域名的流量。   对 api.example.com 的请求可以发送到一个目标组,即请求   到 mobile.example.com 到另一个,以及所有其他人(通过默认方式)   规则)可以发送到第三个。您还可以创建组合的规则   基于主机的路由和基于路径的路由。这将允许你   将请求路由到 api.example.com/production 和    api.example.com/sandbox 指向不同的目标群体。

更新2016-08-11

AWS刚刚(2016年8月11日)推出了一个新的Application Load Balancer for the Elastic Load Balancing service,其旨在提高实时应用程序,微服务,基于容器的架构和流应用程序的灵活性和性能

  

这个新的负载均衡器,它还支持WebSocket协议和   HTTP / 2,在应用层运行并提供基于内容的功能   路由支持。这允许应用程序负载均衡器进行路由   跨一个或多个服务或容器运行的请求   Amazon Elastic Compute Cloud(Amazon EC2)实例,有助于减少   成本和简化服务发现。 [强调我的]

正如introductory blog post所强调的那样,ELB [...]的新应用程序负载均衡器选项在第7层运行,并支持许多高级功能[whereras]原始选项(现在称为经典负载均衡器仍可供您使用,并继续提供第4层和第7层功能

更具体地说,ELB现在支持手头的场景,因为每个Application Load Balancer允许您定义最多10个基于URL的规则来将请求路由到目标组(AWS计划给予随着时间的推移,您可以访问其他路由方法


初步答复

这是不可能的 - Amazon ELB主要(但见下文)提供传输层负载平衡(OSI第4层),它仅基于其负载均衡决策TCP连接但忽略应用程序有效负载。后者将允许应用层负载平衡(OSI第7层),其中应用有效负载确实被考虑用于负载平衡决策。

Amazon ELB中的默认配置实际上为HTTP / HTTPS / SSL提供了基本的应用程序级支持(例如,终止SSL连接和插入X-Forwarded-*标头),但您无法调整此配置;换句话说,ELB确实在中查看了HTTP请求,但在这方面你无法控制ELB的行为。

Choosing Listeners for Your Load Balancer中更详细地解释了这一点,例如:

  

在Elastic Load Balancing中使用TCP / SSL(第4层)

     

当您使用TCP进行前端和后端连接时,您的   负载均衡器将将请求转发给后端实例   无需修改标题。此配置也不会   为会话粘性或X-Forwarded- *标题插入cookie。

     

[...]

     

在Elastic Load Balancing中使用HTTP / HTTPS(第7层)

     

对前端和后端使用HTTP(第7层)时   连接,您的负载均衡器解析请求中的标头和   在重新发送请求之前终止连接   注册实例。这是由提供的默认配置   Elastic Load Balancing。

     

[强调我的]

Architectural Overview也提供了说明和更多细节。

答案 1 :(得分:2)

自您发布问题以来,已有多年,但亚马逊最近宣布了应用(第7层)负载均衡功能。这应该支持您正在寻找的东西。

基本上,您可以根据"规则"定义流量路由到的不同目标组。 (例如,URL路径模式)。可以根据需要对规则进行优先排序。

详情请见https://aws.amazon.com/elasticloadbalancing/applicationloadbalancer/

答案 2 :(得分:0)

这是我见过的可能的解决方案。它不如使用原生Nginx Plus进行负载平衡那么理想,但是如果你需要使用ELB,它就可以工作。

让我们想象一下这样的架构:

                        ELB
                         |
          Server 1    Server 2   Server...
          (Current)   (Current)  (Current)
              \           |         /
                      Server X
                      (Legacy)

第一层中的每个服务器运行" current"实现。他们还在应用层前面运行Nginx或Apache作为Web服务器(这通常是任何Web应用程序前面的最佳实践,IMO)。

每个Nginx / Apache配置文件都包含一行检查URL参数,表明这是一个遗留调用,它将请求代理到服务器X.如果它不是旧调用,它只会继续请求"电流"应用

缺点是您在当前服务器中使用几个周期来代理旧服务器,但您的架构非常简单,并且您拥有集中流程。