ADC

HTTP/2構成

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

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

HTTP/2 のしくみ

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

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

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

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

次のメソッドの説明では、クライアントとサーバーは HTTP/2 接続の一般的な用語です。たとえば、を使用したNetScaler ADCアプライアンスの負荷分散セットアップの場合 HTTP/2, NetScaler 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 を使用して直接通信を開始します。

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

はじめに

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

  • NetScaler ADCアプライアンスは、クライアント側とサーバー側でHTTP/2をサポートします。
  • NetScaler ADCアプライアンスは、HTTP/2サーバープッシュ機能をサポートしていません。
  • NetScaler ADCアプライアンスは、HTTP/2リクエストの優先順位付け機能をサポートしていません。
  • NetScaler ADCアプライアンスは、HTTPS負荷分散セットアップのHTTP/2 SSL再ネゴシエーションをサポートしていません。
  • NetScaler ADCアプライアンスはHTTP/2 NTLM認証をサポートしていません 。
  • HTTP/2 が有効で、接続多重化が無効で(USIP が有効の場合など)、クライアントとサーバの TCP 接続を 1 対 1 でマッピングすると、FIN、リセット(RST)などのクローズイベントがクライアントまたはサーバ接続からリンクされたピア接続に転送されます。

HTTP/2 を構成する

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

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

    NetScaler ADCアプライアンスで直接HTTP/2方式を使用するには、 HTTPプロファイルでダイレクトHTTP/2オプションを有効にする必要があります 。NetScaler 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は負荷分散設定のサーバー側では機能しません

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

NetScaler 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>

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

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

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

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

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

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

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

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

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

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

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

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

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

NetScaler 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が有効な場合は、TCPプロファイルでTCP動的受信バッファリングパラメータを無効にすることをお勧めします。

HTTP/2 経由のウェブソケット設定

NetScaler ADCアプライアンスは、HTTP/2経由のWebSocket接続をサポートしています。CLI または GUI インターフェイスを使用して WebSocket 接続を有効にできます。WebSocket HTTP/2 接続は多重化できます。

CLI を使用して HTTP/2 経由の WebSocket 接続を設定します

デフォルトでは、 WebSocket 接続パラメータは無効になっています 。CLI インターフェイスを使用して WebSocket 接続を有効にできます。

フロントエンド HTTP/2 Webソケット接続を有効にする:

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

SSL 設定の場合:


add httpprofile <http_profile_name> -http2 enabled -websocket enabled

<!--NeedCopy-->

プレーンテキスト設定の場合:


add httpprofile <http_profile_name> -http2 enabled -http2direct enabled -websocket enabled

<!--NeedCopy-->

バックエンド HTTP/2 ウェブソケット接続を有効にする:

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

SSL 設定の場合:

add httpprofile <http_profile_name> -http2 enabled
set httpparam -http2serverside ON
<!--NeedCopy-->

プレーンテキスト設定の場合:

add httpprofile <http_profile_name> -http2 enabled -http2direct enabled
set httpparam -http2serverside ON
<!--NeedCopy-->

GUI を使用して HTTP/2 経由の WebSocket 接続を設定します

次の手順を実行すると、GUI インターフェイスを使用して WebSocket 接続を有効にできます。

既存のプロファイルの編集:

  1. [ システム] > [プロファイル] > [HTTP プロファイル] に移動します。
  2. 「プロファイル」 から必要なプロファイルを選択し 、「 編集」をクリックします。
  3. HTTP プロファイルの設定」で、「 HTTP2 」または「 ダイレクト HTTP2 」チェックボックスを有効にします。
  4. 「WebSocket 接続を有効にする」チェックボックスを選択して、 WebSocket 接続を有効にします

新しいプロファイルの追加:

  1. [ システム] > [プロファイル] > [HTTP プロファイル] に移動します。
  2. 新しい HTTP2 プロファイルを追加するには、[ 追加] をクリックします。
  3. HTTP プロファイルの作成」で、「 HTTP2 」または「 ダイレクト HTTP2 」チェックボックスを有効にします。
  4. WebSocket 接続を有効にする 」チェックボックスを選択します。

次の表は、バックエンドの多重化が無効な場合の WebSocket 接続の動作を示しています。

HTTP パケットバージョン HTTP プロファイル内のウェブソケット アクションをリクエストする バックエンド HTTP/1.1 バックエンド HTTP/2
HTTP/1.1 無効 落下しました - -
HTTP/1.1 有効 HTTP/1.1 各 HTTP/1.1 接続は、バックエンドの専用の HTTP/1.1 接続にマップされます 各 HTTP/1.1 接続のバックエンドでの専用の HTTP/2 接続
HTTP/2 有効 HTTP/2 フロントエンドの各ストリームは専用の HTTP/1.1 接続にマップされます すべてのフロントエンドストリームは、バックエンドの 1 つの HTTP/2 接続または最大 3 つの HTTP/2 接続にマップできます。
HTTP/2 無効 落下しました - -

次の表は、バックエンド多重化が有効な場合の WebSocket 接続の動作を示しています。

HTTP パケットバージョン HTTP プロファイル内のウェブソケット アクションをリクエストする バックエンド HTTP/1.1 バックエンド HTTP/2
HTTP/1.1 無効 落下しました - -
HTTP/1.1 有効 HTTP/1.1 各 HTTP/1.1 接続は、バックエンドの専用の HTTP/1.1 接続にマップされます 複数の HTTP/1.1 クライアントを 1 つの HTTP/2 接続または複数の HTTP/2 接続に多重化できます
HTTP/2 有効 HTTP/2 フロントエンドの各ストリームは専用の HTTP/1.1 接続にマップされます すべてのフロントエンドストリームは、バックエンド上の単一の HTTP/2 接続または複数の HTTP/2 接続にマップできます
HTTP/2 無効 落下しました - -
HTTP/2構成