CloudFront のHTTP/2サポート

4月 22, 2020AWS,CloudFront,ELB

概要

  • 現在対応している案件を通して、CloudFront のHTTP/1.1、HTTP/2 サポートについて調査しました。備忘録として、まとめます。
 

CloudFront がサポートするHTTPバージョン

  • CloudFront は、HTTP/2 をサポートします。クライアントがHTTP/2でアクセスする場合、クライアントからCloudFront間はHTTP/2で通信するため、HTTP/1.1と比べレイテンシが短くなります。また、クライアントがHTTP/2をサポートしない場合は、HTTP/1.1で通信が行われます。
  • CloudFront のディストリビューション設定で、「HTTP/2, HTTP/1.1, HTTP/1.0」を指定します。
   

CloudFrontとオリジン間のHTTPバージョン

CloudFrontとオリジン間は、常にHTTP/1.1が使われるよ!

  • クライアントからCloudFront間の通信がHTTP/2 であっても、CloudFrontからオリジン間は常にHTTP/1.1 を使用した通信となります。
  • オリジンに使用するWebサーバーのアクセスログでも、HTTP/1.1で通信していることが確認できます。

x.x.x.x - - [22/Apr/2020:02:28:07 +0000] "GET /index.html HTTP/1.1" 200 150 "-" "Amazon CloudFront"
     

オリジンにHTTP/2 の通信を通過させたいとき

  • CloudFrontを使用した場合、CloudFrontとオリジン間はHTTP/1.1の通信となるため、アプリケーション側(オリジン)で HTTP/2 での通信が必要になる場合は、CloudFrontの構成は適切ではありません。クライアントからCloudFrontを使わずダイレクトにELBに接続するなどのアーキテクチャの変更が必要となります。
    • CloudFrontを使わない構成に変更した場合で、ELBにALB(Application Load Balancer)を使用する場合は、HTTP/2 をサポート。
    • 上記構成変更で、NLB(Network Load Balancer)を使用する場合、NLBではHTTP/2がサポートされません。NLBはALPN(アプリケーション層でのプロトコルネゴシエーション)に対応していないため。NLB構成の回避策は、NLBでパススルーして(TLSを終端せず)、バックエンドのサーバー側でTLSを終端する方法が必要となります。(2020/5/28)
    • NLB(Network Load Balancer)でも、ALPN(アプリケーション層でのプロトコルネゴシエーション)が対応となりました。詳細はこちらを参照。(2020/5/28)
 

参考資料

AWS,CloudFront,ELB

Posted by takaaki