Citrix ADC

HTTP/2構成

注: HTTP/2機能は、Citrix ADC MPX、VPX、およびSDXモデルでサポートされています。Citrix ADC VPXアプライアンスでは、HTTP/2機能は11.0リリース以降でサポートされています。

Web アプリケーションのパフォーマンスに関する問題は、ページサイズと Web ページ上のオブジェクト数の増加傾向に直接関係しています。HTTP/1.1 は、現在一般的なものよりも小さな Web ページ、低速のインターネット接続、および制限されたサーバーハードウェアをサポートするために開発されました。JavaScript やカスケードスタイルシート (CSS) などの新しいテクノロジーや、Flash ビデオやグラフィックが豊富な画像などの新しいメディアタイプには適していません。これは、サーバーへの接続ごとに 1 つのリソースしか要求できないためです。この制限により、ラウンドトリップの数が大幅に増加し、ページレンダリングが長くなり、ネットワークパフォーマンスが低下します。

HTTP/2 プロトコルは、ネットワーク上で送信されるデータを減らして通信を可能にし、1 つの接続で複数の要求と応答を送信する機能を提供することで、これらの制限に対処します。HTTP/2 では、基盤となるネットワーク接続をより効率的に使用することで、HTTP/1.1 の主な制限に対処しています。これは、要求と応答がネットワーク上で移動する方法を変更します。

HTTP/2 はバイナリプロトコルです。HTTP/1.1のようなテキストプロトコルと比較して、解析がより効率的で、ネットワーク上でよりコンパクトになり、最も重要なこととして、エラーが発生しにくくなります。HTTP/2 プロトコルは、フレームタイプと、クライアントとサーバ間で HTTP メッセージのカプセル化および転送方法を定義するバイナリフレーミング層を使用します。HTTP/2 機能は、CONNECT メソッドを使用して、単一の HTTP/2 ストリームを介してリモートホストへのトンネル接続を確立します。

HTTP/2 プロトコルには、特にモバイルネットワーク経由で接続するクライアントに対して、パフォーマンスを大幅に向上させる多くのパフォーマンス向上変更が含まれています。

次の表に、HTTP/1.1からHTTP/2 の主な改善点を示します。

HTTP/2 の機能 説明
ヘッダー圧縮 HTTP ヘッダーには多くの繰り返し情報があるため、データ転送中に不要な帯域幅を消費します。HTTP/2 ヘッダーを圧縮し、要求と応答ごとにHTTPヘッダーを転送する要件を最小限に抑えることで、帯域幅の要件を削減します。
接続多重化 レイテンシーは、ページの読み込み時間とエンドユーザーエクスペリエンスに大きな影響を与える可能性があります。接続の多重化は、単一の接続で複数の要求と応答を送信することにより、この問題を克服します。
サーバープッシュ サーバープッシュにより、サーバーはクライアントブラウザーにコンテンツをプロアクティブにプッシュできるため、ラウンドトリップの遅延を回避できます。この機能は、クライアントが必要と考える応答をキャッシュし、ラウンドトリップ回数を減らし、ページのレンダリング時間を改善します。重要:Citrix ADCアプライアンスは、サーバープッシュ機能をサポートしていません。
ヘッドオブラインブロッキングなし HTTP 1.1 では、ブラウザは接続ごとに一度に 1 つのリソースをダウンロードできます。ブラウザが大きなリソースをダウンロードする必要がある場合、最初のダウンロードが完了するまで、他のすべてのリソースのダウンロードをブロックします。HTTP/2 は、多重化アプローチでこの問題を克服します。これにより、クライアントブラウザーは、同じ接続を介して他の Web コンポーネントを並行してダウンロードし、利用可能になったときにそれらを表示できます。
リクエストの優先順位付け ブラウザーが Web ページをレンダリングするとき、すべてのリソースが同等の優先度を持つわけではありません。ロード時間を短縮するために、最新のブラウザーはすべて、アセットのタイプ、ページ上の位置、および以前の訪問から学習した優先度によってリクエストを優先します。HTTP/1.1では、このプロトコルは多重化をサポートしておらず、サーバーによる要求の優先順位付けを通信する方法がないため、ブラウザは優先度データを使用する能力が制限される。その結果、不要なネットワーク遅延が生じます。HTTP/2 は、ブラウザがすべてのリクエストをディスパッチできるようにすることで、この問題を克服します。ブラウザーは、ストリームの依存関係と重みによってストリームの優先順位付けの優先度を伝えることができ、サーバーが応答配信を最適化できるようにします。重要:Citrix ADCアプライアンスは、要求の優先順位付け機能をサポートしていません。

HTTP/2 のしくみ

Citrix ADCアプライアンスはクライアント側でもサーバー側でも HTTP/2 をサポートします。クライアント側では、Citrix ADCアプライアンスは HTTP/2のHTTP/HTTPS仮想サーバー をホストするサーバーとして動作します。バックエンド側では、Citrix ADCは仮想サーバーにバインドされているサーバーのクライアントとして機能します。

したがって、Citrix ADCアプライアンスは、クライアント側とサーバー側で別々の接続を維持します。Citrix ADCアプライアンスには、クライアント側とサーバー側に別々のHTTP/2構成があります。

HTTPS (SSL) 負荷分散構成の場合は HTTP/2

HTTPS負荷分散構成の場合、Citrix ADCアプライアンスはTLS ALPN拡張(RFC 7301)を使用して、クライアント/サーバーがHTTP/2をサポートするかどうかを判断します。その場合、アプライアンスは、クライアント/サーバー側でデータを送信するためのアプリケーション層プロトコルとして HTTP/2 を選択します(RFC 7540-セクション 3.3 を参照)。 アプライアンスは、TLS ALPN 拡張を使用してアプリケーション層プロトコルを選択するときに、次の優先順位を使用します。

  • HTTP/2(HTTP プロファイルで有効になっている場合)
  • HTTP/1.1

HTTP 負荷分散設定用の HTTP/2

HTTP負荷分散構成の場合、Citrix ADCアプライアンスは次のいずれかの方法を使用して、HTTP/2を使用してクライアント/サーバーとの通信を開始します。

次のメソッドの説明では、クライアントとサーバーは HTTP/2 接続の一般的な用語です。たとえば、を使用したCitrix ADCアプライアンスの負荷分散セットアップの場合 HTTP/2, Citrix ADCアプライアンスは、クライアント側でサーバーとして機能し、サーバー側でクライアントとして機能します。

  • HTTP/2 アップグレード。クライアントは HTTP/1.1 リクエストをサーバーに送信します。リクエストにはアップグレードヘッダーが含まれており、HTTP/2 への接続をサーバーにアップグレードするように要求します。サーバーが HTTP/2 をサポートしている場合、サーバーはアップグレード要求を受け入れ、応答で通知します。クライアントとサーバは、クライアントがアップグレード確認応答を受信した後、HTTP/2 を使用して通信を開始します。

  • 直接 HTTP/2。クライアントは、HTTP/2 アップグレード方式を使用する代わりに、HTTP/2 でサーバーとの通信を直接開始します。サーバーが HTTP/2 をサポートしていない場合、または HTTP/2 要求を直接受け付けるように構成されていない場合、クライアントからの HTTP/2 パケットはドロップされます。この方法は、クライアントデバイスの管理者が、サーバーが HTTP/2 をサポートしていることをすでに知っている場合に役立ちます。

  • 代替サービス (ALT-SVC) を使用して直接 HTTP/2。サーバーは、HTTP/1.1 応答に代替サービス (ALT-SVC) フィールドを含めることで、HTTP/2 をサポートしていることをクライアントにアドバタイズします。クライアントが ALT-SVC フィールドを認識するように設定されている場合、クライアントとサーバは、クライアントが応答を受信した後、HTTP/2 を使用して直接通信を開始します。

Citrix ADCアプライアンスは、HTTP/2メソッドのHTTPプロファイルで構成可能なオプションを提供します。これら HTTP/2 オプションは、HTTPSまたはHTTP負荷分散セットアップのサーバー側だけでなくクライアント側にも適用できます。HTTP/2 メソッドとオプションの詳細については、 HTTP/2 オプション PDF を参照してください。

はじめに

Citrix ADCアプライアンスでHTTP/2の構成を開始する前に、次の点に注意してください。

  • Citrix ADCアプライアンスは、クライアント側とサーバー側でHTTP/2をサポートします。
  • Citrix ADCアプライアンスは、HTTP/2サーバープッシュ機能をサポートしていません。
  • Citrix ADCアプライアンスは、HTTP/2リクエストの優先順位付け機能をサポートしていません。
  • Citrix ADCアプライアンスは、HTTPS負荷分散セットアップのHTTP/2 SSL再ネゴシエーションをサポートしていません。
  • Citrix ADCアプライアンスはHTTP/2 NTLM認証をサポートしていません 。
  • ユーザーソースIP(USIP)モードが有効で、Citrix ADCアプライアンスでプロキシモードが無効になっている場合、HTTP/2は機能しません。

HTTP/2 を構成する

負荷分散設定(HTTPS または HTTP)の HTTP/2 の設定は、次のタスクで構成されます。

  • HTTP/2 を有効にし、HTTP プロファイルでオプションの HTTP/2 パラメータを設定します。HTTP プロファイルで HTTP/2 を有効にします。HTTPプロファイルでHTTP/2のみを有効にすると、Citrix ADCアプライアンスはHTTP/2での通信にアップグレード方法(HTTPの場合)またはTLS ALPN方式(HTTPS)のみを使用します。

    Citrix ADCアプライアンスが直接使用する場合 HTTP/2 メソッド、 直接 HTTP/2 オプションはHTTPプロファイルで有効にする必要があります。Citrix ADCアプライアンスが代替サービス方法を使用して直接HTTP/2を使用するには、 HTTPプロファイルで代替サービス(altsvc) オプションを有効にする必要があります。

  • HTTPプロファイルを仮想サーバーまたはサービスにバインドします。HTTP プロファイルを仮想サーバーにバインドして、負荷分散セットアップのクライアント側の HTTP/2 を構成します。HTTP プロファイルをサービスにバインドして、負荷分散設定のサーバー側の HTTP2 を設定します。

クライアント側とサーバー側で別々のHTTPプロファイルをバインドCitrix。

  • HTTP/2 サーバー側のサポートのグローバルパラメータを有効にするHTTP/2 サービス側http2ServerSide)グローバル HTTP パラメータを有効にして、HTTP/2 が構成されているすべての負荷分散セットアップのサーバー側で HTTP/2 サポートを有効にします。

    HTTP/2 サービス側が無効な場合、 関連する負荷分散サービスにバインドされた HTTP プロファイルで HTTP/2 が有効になっている場合でも、 HTTP/2 は負荷分散設定のサーバー側では機能しません。

Citrix ADCコマンドライン手順:

Citrix ADCコマンドラインを使用して HTTP/2を有効にして、HTTP/2 パラメーターを設定するには

  • HTTP プロファイルの追加中に HTTP/2 を有効にして HTTP/2 パラメータを設定するには、コマンドプロンプトで次のように入力します。

add ns httpProfile <name> - http2 ( ENABLED | DISABLED ) [-http2Direct ( ENABLED | DISABLED )] [-altsvc ( ENABLED | DISABLED )] show ns httpProfile <name>

  • HTTP プロファイルの変更中に HTTP/2 を有効にして HTTP/2 パラメータを設定するには、コマンドプロンプトで次のように入力します。

set ns httpProfile <name> -http2 ( ENABLED | DISABLED ) [-http2Direct ( ENABLED | DISABLED)] [-altsvc (ENABLED | DISABLED )] show ns httpProfile <name>

Citrix ADCコマンドラインを使用してHTTPプロファイルを仮想サーバーにバインドするには

コマンドプロンプトで入力します。

set lb vserver <name> - httpProfileName <string> show lb vserver <name>

Citrix ADCコマンドラインを使用してHTTPプロファイルを負荷分散サービスにバインドするには

コマンドプロンプトで入力します。

set service <name> -httpProfileName <string> show service <name>

Citrix ADCコマンドラインを使用してサーバー側でHTTP/2サポートをグローバルに有効にするには

コマンドプロンプトで入力します。

set ns httpParam -HTTP2Serverside( ENABLED | DISABLED ) show ns httpParam

Citrix ADC GUIを使用してHTTP/2を有効にし、HTTP/2パラメーターを設定するには

  1. [ システム ] > [ プロファイル] に移動し、[ HTTP プロファイル ] タブをクリックします。
  2. HTTP プロファイルを追加するとき、または既存の HTTP プロファイルを変更するときに、 HTTP/2 を有効にします。

Citrix ADC GUIを使用してHTTPプロファイルを仮想サーバーにバインドするには

  1. [ トラフィック管理 ] > [ 負荷分散 ] > [ 仮想サーバー] に移動し、仮想サーバーを開きます。
  2. [ 詳細設定] で、[ + HTTP プロファイル ] をクリックして、作成した HTTP プロファイルを仮想サーバーにバインドします。

Citrix ADC GUIを使用してHTTPプロファイルを負荷分散サービスにバインドするには

  1. [ トラフィック管理 ] > [ 負荷分散 ] > [ サービス] に移動し、サービスを開きます。
  2. [ 詳細設定] で、[ + HTTP プロファイル ] をクリックして、作成した HTTP プロファイルをサービスにバインドします。

GUI を使用してサーバー側で HTTP/2 サポートをグローバルに有効にするには

[ システム ] > [ 設定] に移動し、[ HTTP パラメーターの変更 ] をクリックし、[ HTTP/2 サーバー側] を有効にします。

設定例

次の設定例では、HTTP プロファイル HTTP-PROFILE-HTTP2-クライアント側で HTTP/2 およびダイレクト HTTP/2 が有効になっています。 プロファイルは仮想サーバー LB-VS-1 にバインドされています。

set ns httpProfile HTTP-PROFILE-HTTP2-CLIENT-SIDE -http2 enabled -http2Direct enabled
Done

set lb vserver LB-VS-1 -httpProfileName HTTP-PROFILE-HTTP2-CLIENT-SIDE

Done
<!--NeedCopy-->

次の設定例では、HTTP プロファイル HTTP-PROFILE-HTTP2-サーバー側で HTTP/2 および代替サービス(ALT-SVC)が有効になっています。プロファイルはサービスLB-SERVICE-1にバインドされます。

set ns httpparam -HTTP2Serverside ENABLED
Done

set ns httpProfile HTTP-PROFILE-HTTP2-SERVER-SIDE -http2 ENABLED -altsvc ENABLED
Done

set service LB-SERVICE-1 -httpProfileName HTTP-PROFILE-HTTP2-SERVER-SIDE
Done
<!--NeedCopy-->

HTTP/2 の初期接続ウィンドウサイズを構成する

RFC 7540 に従って、HTTP2 ストリームおよび接続のフロー制御ウィンドウを 64 K(65535)オクテットに設定する必要があり、この値に加えられた変更はピアに伝達する必要があります。ADCアプライアンスは、フロー制御ウィンドウサイズの変化を次のように伝えます。

  • ストリームにSETTINGSフレームを使用する。
  • 接続にWINDOW_UPDATEフレームを使用する。

HTTP プロファイルでは、ストリームレベルで初期ウィンドウサイズを設定するようにhttp2InitialWindowSizeパラメータを設定する必要があります。内部システムエラーのため、ADCアプライアンスは接続のフロー制御ウィンドウも初期化します。ストリームに設定されたフロー制御ウィンドウに変更がある場合、ADC アプライアンスは設定フレームを使用してピアと通信します。しかし、ADC アプライアンスは、WINDOW_UPDATEフレームを使用して接続のフロー制御ウィンドウの変更を伝達しません。これにより、接続がフリーズします。

この問題を克服するために、接続のフロー制御ウィンドウを制御するhttp2InitialConnWindowSizeパラメータ(バイト単位)が追加されました。個別の設定可能なパラメータを使用することで、ストリームレベルと接続レベルの両方で、変更されたウィンドウサイズの更新をアプライアンスが送信できるようにできるようになりました。

CLI を使用して HTTP/2 初期接続ウィンドウサイズパラメータを設定します

コマンドプロンプトで入力します。

set http profile p1 -http2InitialConnWindowSize 8290
Initial window size for stream level flow control, in bytes.
Default value: 65535
Minimum value: 8192
Maximum value: 20971520
<!--NeedCopy-->
HTTP/2構成