Terminate HTTP/2 on AWS ALB

Is there any possible a way to terminate HTTP/2 on AWS Application ELB, so that the web servers don't need to be configured to support HTTP/2?

They already don't need to be.

On Application Load Balancer (ELB/2.0) that's how it works out of the box. The ALB speaks to the instances using HTTP/1.1 while speaking HTTP/2 to the browser if the browser supports it, otherwise HTTP/1.x.

You can use HTTP/2 with HTTPS listeners. You can send up to 128 requests in parallel using one HTTP/2 connection. The load balancer converts these to individual HTTP/1.1 requests and distributes them across the healthy targets in the target group using the round robin routing algorithm. (emphasis added)

http://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html


ELB doesn't support HTTP2, ALB does, and so does CloudFront. You could put ELB into TCP mode and support HTTP2 using your web server, but that removes the protection you get from an ELB (it protects you again a bunch of attacks, DDOS, SYN Flood, etc).

If you need HTTP/2 your options, in the order I think best, are:

  • Use CloudFront (restrict locations if you want to keep costs down)
  • Use an ALB
  • Use ELB in TCP mode with HTTP2 on your web server