AWS ELB/ALB如何通过http/2将流量传递到EC2实例(而不是http/1.1)?

8

AWS ELB/ALB现在支持HTTP/2。

根据文档(https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html):

应用程序负载均衡器通过HTTPS侦听器提供原生的HTTP/2支持。您可以使用一个HTTP/2连接并行发送最多128个请求。负载均衡器将这些请求转换为单独的HTTP/1.1请求,并将它们分布到目标组中的健康目标上。

我的目标是运行支持HTTP/2的Apache的EC2实例。是否可能让ALB通过HTTP/2连接到目标(EC2实例),避免ALB <--> ec2之间的连接是通过HTTP/1.1进行的?

我在控制台或文档中没有看到任何方法可以实现这一点。


我非常确定您可以将ALB连接到实例组。您可以在创建ALB的最后一步中配置这些组。 - jlmurph
2个回答

5

2
我很希望这种情况很快会改变,随着HTTP/2的使用越来越广泛,ALB将允许HTTP/2在整个连接中使用。 - Konstantin
2
这种设计的优点在于,单个观众的并行请求可以分散在后端实例之间。如果您真的想运行自己的http/2,则可以使用网络负载均衡器(NLB)来运行设置,但是您将失去访问Amazon证书管理器证书的权限,因为它们无法与NLB一起使用,实际上,您的实例将不得不自己处理所有的TLS处理,因为NLB不会进行TLS卸载。 - Michael - sqlbot
这个还适用吗?我已经在ALB上启用了http2,但是当我执行curl -i domain或curl -i https://domain --http2时,它给出的是http1.1。这是预期的行为吗? - cloudbud
3
看起来现在可能是可行的。请参阅 https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html。 - killdash9
3
当目标组配置为http2时,HTTP/1.1客户端收到了464 HTTP状态码并且没有结果,这似乎不太实际。 - Guido Leenders
这个答案应该更新,因为现在已经有可能了。请参考@Sateesh的答案。 - runamok

3
是的,这是可能的。在基本配置部分中配置目标组以使用http2,如下所示。 enter image description here

1
我的经验是,虽然这个选项可用,但实际上并不起作用。我尝试使用HTTP/2到目标实例,但完全没有成功。我认为问题可能只是ALB执行目标健康检查的方式。 - user1751825
和@user1751825说的一样 - 我在我的EC2 nginx上启用了http2,但如果我使用HTTP2创建一个TargetGroup,健康检查就永远无法变成Healthy。这是nginx配置的日志: int.ip.1 - - [18/Sep/2023:07:18:13 +0000] "PRI * HTTP/2.0" 400 157 "-" "-" "-" int.ip.2 - - [18/Sep/2023:07:18:14 +0000] "PRI * HTTP/2.0" 400 157 "-" "-" "-" int.ip.3 - - [18/Sep/2023:07:18:39 +0000] "GET /HTTP/1.1" 200 25 "-" "ELB-HealthChecker/2.0" "-" int.ip.3 - - [18/Sep/2023:07:18:49 +0000] "GET / HTTP/1.1" 200 25 "-" "ELB-HealthChecker/2.0" "-"最终使用了HTTP1.1 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接