クイックUDPインターネット接続 (QUIC) は、特にネットワーク接続が弱い場合や、Wi-Fiとセルラーネットワーク間で頻繁に接続が切り替えられる場合に、クライアントからのアクセスを高速化できるネットワークプロトコルです。 QUICは、再接続なしで接続多重化を実現し、アクセスを高速化し、データ転送を保護します。
QUICの概要
QUICはSSLと同じレベルのセキュリティを提供し、接続多重化をサポートします。 接続が弱く、ネットワーク待ち時間が長く、パケット損失率が高いシナリオでは、QUICはサービスの可用性を保証します。 QUICは、オペレーティングシステムやカーネルに関係なく、アプリケーション層で異なる輻輳制御アルゴリズムを実装できます。 TCPと比較して、QUICはサービス要件に基づいた柔軟な調整をサポートします。 QUIC は、TCP の最適化でボトルネックが発生した場合の適切な代替手段です。
ショートビデオやライブストリーミングサービスが普及するにつれて、ストリーミングプラットフォームはビジネス要件を満たすために高帯域幅と低ネットワーク遅延を必要とします。 QUICは、ネットワーク遅延を最小限に抑え、ビデオバッファリングを削減し、オーディオおよびビデオコンテンツの配信を高速化し、データ転送を保護します。
サポートされるQUICプロトコルタイプ
Application Load Balancer (ALB) はgQUICとiQUICをサポートしています。 HTTP/3は、iQUICに基づくアプリケーション層プロトコルです。 HTTP/3は、iQUICを使用して、多重化、輻輳制御、損失検出、および再送信を実装します。 HTTP/3は、より高速な接続確立をサポートし、ヘッドオブラインブロッキングの問題を排除します。
ALBは、gQUICバージョンQ46、Q43、およびQ39とHTTP/3 (h3) をサポートしています。
HTTPバージョンネゴシエーションの仕組み
HTTPSリスナーのQUICアップグレードが有効になっている場合、ALBはHTTP/3とgQUICをクライアントにアドバタイズします。 HTTP/3はgQUICよりも優先度が高い。 したがって、HTTP/3を使用するクライアントは、ALBとの接続を確立するときに優先度が高くなります。
クライアントがHTTP/3経由でALBとの接続を確立できなかった場合、HTTPSまたはHTTP/2を使用して接続を確立します。
クライアントがHTTP/3を介してALBとの接続を確立する場合、クライアントはHTTP/3に関連するCookieを使用します。
ALBは、QUICアップグレードが有効かどうかに関係なく、クライアントへの接続を開始できます。
ALBは、Alt-Svc HTTPレスポンスヘッダーを使用して、サポートされているプロトコルをクライアントに通知します。 次のサンプルコードに例を示します。
Alt-Svc : h3=":$quic_port"; ma=3600,quic=":$quic_port"; v="46,43,39"; ma=3600
リスナーに対してQUICアップグレードを有効にすると、クライアントは次のシナリオでHTTP/3の代わりにHTTPSまたはHTTP/2を使用する可能性があります。
クライアントでサポートされているHTTP/3バージョンは、ALBでサポートされているHTTP/3バージョンと互換性がありません。
ALBは、HTTP/3の有効化を妨げるUDPトラフィック輻輳またはレート制限を検出します。
クライアントはHTTP/3をサポートしていません。 したがって、HTTP/3ネゴシエーションは開始されません。
クライアント要件
Google Chromeを使用している場合は、ALBへのQUICリクエストを直接開始できます。
Google Chromeを使用してQUICリスナーにアクセスする前に、ブラウザがALBで使用されるQUICバージョンをサポートしていることを確認してください。
ALBでサポートされている最新のgQUICバージョンはQ46で、Google Chrome 74〜81と互換性があります。
ALBでサポートされている最新のHTTP/3バージョンはh3で、Google Chrome 87以降と互換性があります。
自己開発アプリケーションなどの他のクライアントを使用する場合、クライアントは、LSQUICクライアント、Cronet、ngtcp2、およびquicheライブラリなどのQUICをサポートするネットワークライブラリと統合されている必要があります。
サンプルシナリオ
Google Chromeを使用してALBにアクセスすると、ALBはリスナーに関連付けられているドメイン名example.com
に基づいてバックエンドサーバーにリクエストを転送します。 リクエストの配信に使用されるリスナーは、次のシナリオで異なります。
HTTPSリスナーとQUICリスナーが設定されている場合は、QUICリスナーが使用されます。 ブラウザから
example.com
にアクセスすると、ALBのQUICリスナーがデフォルトのバックエンドサーバーグループRS1にリクエストを配信します。QUICリスナーが使用できない場合、HTTPSリスナーが自動的に引き継ぎます。 ブラウザから
example.com
にアクセスすると、ALBのHTTPSリスナーがデフォルトのバックエンドサーバーグループRS1にリクエストを配信します。
前提条件
ALBインスタンスが作成されました。 詳細については、「ALBインスタンスの作成」をご参照ください。
RS1という名前のサーバーグループが作成されます。 詳細については、「サーバーグループの作成と管理」をご参照ください。
ECS01という名前のElastic Compute Service (ECS) インスタンスがサーバーグループRS1に追加されます。 NGINXビデオサービスはECS01でホストされます。
SSL証明書がALBインスタンスにデプロイされています。 証明書はドメイン名
example.com
に関連付けられています。
ステップ1: QUICリスナーの作成
ALBコンソールにログインします。
上部のナビゲーションバーで、ALBインスタンスがデプロイされています。
[インスタンス] ページで、管理するALBインスタンスのIDをクリックします。 [リスナー] タブで、[リスナーの作成] をクリックします。
リスナーの設定ウィザードページで、次のパラメーターを設定し、次へをクリックします。
パラメーター
説明
リスナープロトコルの選択
リスナープロトコルを選択します。
この例では、QUICが選択されています。
リスナーポート
ALBインスタンスがリッスンするポートを選択します。 ALBインスタンスはポートをリッスンし、リクエストをバックエンドサーバーに転送します。
有効な値: -1 から 65535
説明同じALBインスタンスで、同じプロトコルを使用するリスナーのポートは一意である必要があります。 HTTPリスナーとHTTPSリスナーは異なるポートを使用する必要があります。
リスナー名
リスナーの名前を入力します。
タグ
[タグキー] および [タグ値] パラメーターを設定して、タグを追加します。 1つ以上のタグを追加できます。
タグを指定した後、[リスナー] タブのタグでリスナーをフィルタリングできます。
詳細設定
[変更] をクリックして、詳細設定を設定できます。
アイドル接続タイムアウト期間
アイドル接続のタイムアウト期間を指定します。 単位は秒です。 有効な値: 1 ~ 60。 より長いタイムアウト期間を指定するには、Quota Centerコンソールに移動します。
指定されたタイムアウト期間内にリクエストが受信されない場合、ALBは接続を閉じます。 別の要求が受信されると、ALBは新しい接続を確立する。
接続要求タイムアウト
リクエストのタイムアウト時間を指定します。 単位は秒です。 有効な値: 1 ~ 180 より長いタイムアウト期間を指定するには、Quota Centerコンソールに移動します。
リクエストタイムアウト期間内にバックエンドサーバーから応答が受信されない場合、ALBはHTTP 504エラーコードをクライアントに返します。
圧縮
圧縮を有効にすると、特定の種類のファイルが圧縮されます。 圧縮を無効にすると、ファイルは圧縮されません。
Brotliはすべてのファイルタイプをサポートします。 GZIPは、
text/xml
、text/plain
、text/css
、application/javascript
、application/x-javascript
、application/rss + xml
、application/atom + xml
、application/xml
、application/json
のファイルタイプをサポートしています。HTTPヘッダーの追加
次のオプションを選択できます。
ALB IDを取得するSLB-IDの追加
: ALBインスタンスのIDを保持するためにSLB-IDヘッダーを追加します。X-Forwarded-Protoを追加してリスニングプロトコルを取得
: X-Forwarded-Protoヘッダーを追加して、リスナープロトコルを保持します。X-Forwarded-Portをリスニングポートの取得に追加
: X-Forwarded-Portヘッダーを追加して、リスナーポートを保持します。
では、SSL証明書の設定ステップ、サーバー証明書を選択し、次へ.
では、サーバーグループの選択ステップ、選択サーバータイプサーバーグループを選択し、バックエンドサーバーを表示し、次へ.
では、構成レビューステップ、設定を確認し、送信.
ステップ2: HTTPSリスナーの作成
HTTPSリスナーを作成するときは、QUICアップグレードを有効にして、作成したQUICリスナーをHTTPSリスナーに関連付けます。
[インスタンス] ページで、[ステップ1] でQUICリスナーを作成したALBインスタンスを見つけ、そのIDをクリックします。
インスタンスの詳細タブをクリックし、リスナータブをクリックし、リスナーの作成をクリックします。
リスナーの設定ステップで、次のパラメータを設定し、次へをクリックします。
パラメーター
説明
リスナープロトコルの選択
リスナープロトコルを選択します。
この例では、HTTPSが選択されています。
リスナーポート
ALBインスタンスがリッスンするポートを入力します。 ALBインスタンスはポートをリッスンし、リクエストをバックエンドサーバーに転送します。 この例では、ポート443が使用される。 ほとんどの場合、ポート80はHTTPに使用され、ポート443はHTTPSに使用されます。
有効な値: -1 から 65535
説明ALBインスタンスがリッスンするポートは一意である必要があります。
リスナー名
リスナーの名前を入力します。 名前は2 ~ 256文字で、英数字、ピリオド (.) 、アンダースコア (_) 、ハイフン (-) 、コンマ (,) 、セミコロン (;) 、スラッシュ (/) 、アット記号 (@) を使用できます。
詳細設定
詳細設定の横にある [変更] をクリックして、詳細設定を設定できます。
HTTP/2の有効化
HTTP/2を有効にするかどうかを指定します。
アイドル接続タイムアウト期間
アイドル接続のタイムアウト期間を指定します。 単位は秒です。 有効な値: 1 ~ 60。
指定されたタイムアウト期間内にリクエストが受信されない場合、SLBは接続を閉じます。 要求が受信されると、SLBは新しい接続を確立する。
説明この機能はHTTP/2リクエストでは使用できません。
接続要求タイムアウト
リクエストのタイムアウト時間を指定します。 単位は秒です。 有効な値: 1 ~ 180
リクエストタイムアウト期間内にバックエンドサーバーから応答が受信されない場合、ALBはHTTP 504エラーコードをクライアントに返します。
圧縮
圧縮を有効にすると、特定のタイプのファイルが圧縮されます。 圧縮を無効にすると、ファイルは圧縮されません。
Brotliはすべてのファイルタイプをサポートします。 Gzipは、
text/xml
、text/plain
、text/css
、application/javascript
、application/x-javascript
、application/rss + xml
、application/atom + xml
、application/xml
、application/json
のファイルタイプをサポートしています。HTTPヘッダーの追加
追加するHTTPヘッダーを選択します。 有効な値:
ALBがX-Forwarded-For HeaderでクライアントIPをフィルタリングできるようにする
: クライアントIPアドレスを取得します。ALB IDを取得するSLB-IDの追加
: ALBインスタンスのIDを取得します。Add X-Forwarded-Proto to Retrieve Listening Protocol
: リスナープロトコルを取得します。X-Forwarded-Clientcert-subjectdnをクライアントサーバー証明書の所有者情報の取得
: クライアント証明書に関する所有者情報を取得します。X-Forwarded-Clientcert-issuerdnを追加してクライアント証明書発行者情報を取得
: クライアント証明書を発行する権限に関する情報を取得します。Add X-Forwarded-Clientcert-fingerprint to Retrieve Fingerprint of Client Certificate
: クライアント証明書のフィンガープリントを取得します。クライアント証明書の検証結果を取得するためにX-Forwarded-Clientcert-clientverifyを追加
: クライアント証明書の検証結果を取得します。[X-Forwarded-Portをリスニングポートの取得]
: リスナーポートを取得します。[X-Forwarded-Client-srcportをクライアントポートの取得]
: クライアントポートを取得します。
QUICアップデート
QUICアップグレードを有効にするかどうかを指定します。 この機能を使用するには、[関連するQUICリスナー] ドロップダウンリストからQUICリスナーを選択する必要があります。
QUICリスナーが作成されていない場合は、[リスナーの作成] をクリックして作成します。 詳細については、「QUICリスナーの追加」をご参照ください。
ALBはiQUICとgQUICをサポートしています。 詳細については、「HTTPバージョンネゴシエーションの仕組み」をご参照ください。
SSL証明書の設定ステップで、サーバー証明書を選択し、次へをクリックします。
説明TLSセキュリティポリシーを設定するには、[詳細設定] の横にある [変更] をクリックします。
サーバーグループの選択ステップで、選択サーバータイプサーバーグループを選択し、バックエンドサーバーを表示し、次へをクリックします。
構成レビューステップで、設定を確認し、送信をクリックします。
ステップ3: CNAMEレコードの作成
CNAMEレコードを使用して、ドメイン名example.com
をALBのpublicdomain名にマップします。
ALBコンソール にログインします。
上部のナビゲーションバーで、リージョンを選択します。
を検索するFind theALBドメイン名を管理およびコピーするインスタンス。
CNAMEレコードを作成するには、次の操作を実行します。
Alibaba Cloud DNSコンソール にログインします。
DNSの管理ページで、ドメイン名の追加 をクリックします。
ドメイン名の追加ダイアログボックスで、ホストのドメイン名を入力し、OKをクリックします。
重要CNAMEレコードを作成する前に、TXTレコードを使用してドメイン名の所有権を確認する必要があります。
管理するドメイン名を見つけて、をクリックします。DNS設定で、アクション列を作成します。
DNS設定ページで、レコードの追加をクリックします。
DNSレコードの追加パネルで、次のパラメータを設定し、OKをクリックします。
パラメーター
説明
レコードタイプ
ドロップダウンリストから [CNAME] を選択します。
ホスト名
ドメイン名のプレフィックスを入力します。
DNSリクエストソース
[デフォルト] を選択します。
レコード値
ALBインスタンスのドメイン名であるCNAMEを入力します。
TTL
DNSサーバーにキャッシュされるCNAMEレコードの有効期限 (TTL) 値を選択します。 この例では、デフォルト値が使用されます。
説明CNAMEレコードを作成すると、すぐに有効になります。 レコードを変更すると、レコードはレコードのTTLに基づいて有効になります。 デフォルトでは、TTLは10分です。
作成するCNAMEレコードが既存のレコードと競合する場合は、別のドメイン名を指定することを推奨します。 詳細については、「競合するDNSレコードのルール」をご参照ください。
ステップ4: 結果を確認する
この例では、Windowsクライアントが使用されます。 ALBインスタンスにアクセスするには、ブラウザにexample.com
を入力します。 この例では、NGINXビデオサービスがサーバグループRS1のECS01にデプロイされている。
HTTPSリスナーとQUICリスナーが設定されており、ブラウザに
example.com
を入力してF12
を押すと、現在のwebページのプロトコルはHTTP/3として表示されます。 応答時間は93ミリ秒です。QUICリスナーが使用できない場合、ブラウザに
example.com
を入力してF12
キーを押すと、現在のwebページのプロトコルがHTTP/2として表示されます。 応答時間は148ミリ秒です。
結果は、HTTP/3がビデオサービスへのクライアントアクセスを高速化することを示しています。