Cloudflareは、NGINXでHTTP / 3プロトコルのサポートを提供するモジュールを用意しました。 モジュールが完了しました キッシュライブラリのスナップの形で CloudflareでQUICおよびHTTP / 3トランスポートプロトコルを実装して開発されました。 キッシュコードはRustで書かれています、ただし、NGINXのモジュールはCで記述されており、動的リンクを介してライブラリにアクセスします。 営業時間はBSDライセンスの下で開かれています。
クライアントソフトウェアから、 HTTP / 3のサポートは、ChromeCanaryの実験用ビルドにすでに追加されています とcurlユーティリティ。 サーバー側では、これまで機能が制限された分離されたテスト実装の使用が必要でした。 nginxでHTTP / 3を処理する機能 HTTP / 3をサポートするサーバーの展開を大幅に簡素化します そしてそれは新しいプロトコルのテスト実装をよりアクセスしやすくします。
HTTP / 3は、QUICプロトコルの使用を標準化します HTTP / 2のトランスポートとして。 QUICプロトコルは、Web用のTCP + TLSの代替としてGoogleによって開発されました。 TCPでの長時間のインストールおよび配位化合物の問題を解決することを目的としています データ送信中のパケット損失の排除を遅らせます。 QUICは、複数の接続の多重化をサポートし、TLS / SSLと同等の暗号化方式を提供するUDPプロトコルへのプラグインです。
目立つQUICの主な特徴は次のとおりです。
- TLSと同様の高いセキュリティ(実際、QUICはTLS over UDPを使用する機能を提供します)。
- パケット損失を防ぐフロー整合性制御。
- 即座に接続を確立し(0-RTT、約75%の場合、データは接続セットアップパケットの送信直後に転送できます)、要求の送信と応答の受信の間の遅延を最小限に抑える機能(RTT、ラウンドトリップ時間) 。
- パケットを再送信するときに同じシーケンス番号を使用しない。これにより、受信したパケットを判別する際のあいまいさが回避され、タイムアウトが排除されます。
- パケットを失うと、それに関連付けられたストリームのみの配信に影響し、現在の接続を介して並列に送信されるストリームでのデータの配信を停止しません。
- 失われたパケットの再送信による遅延を最小限に抑えるエラー訂正ツール。 失われたパケットデータの再送信を必要とする状況を減らすための特別なパケットレベルのエラー訂正コードの使用。
- 暗号化ブロックの境界はQUICパケットの境界と一致し、後続のパケットのコンテンツのデコードに対するパケット損失の影響を軽減します
- TCPキューのブロックに問題はありません
- モバイルクライアントの再接続を確立する時間を短縮する接続識別子のサポート
- 高度なメカニズムを接続して接続の過負荷を制御する機能
- 各方向の帯域幅を予測する手法を使用して、最適なパケット転送強度を確保し、パケット損失が観察される輻輳状態に到達しないようにします。
- TCPを超える顕著なパフォーマンスとパフォーマンスの向上。 YouTubeのようなビデオサービスの場合、QUICはビデオ視聴時の再バッファリング操作が30%削減されたことを示しました。
NGINXでHTTP / 3をサポートするモジュールを実装するにはどうすればよいですか?
このモジュールをサーバーに実装できるようにすることに関心がある人は、 彼らは私たちが以下に共有する指示に従うことによってそれを行うことができます。
それをコンパイルするには、 nginx1.16のパッチをダウンロードするだけです キッシュライブラリコード。
curl -O https://nginx.org/download/nginx-1.16.1.tar.gz tar xzvf nginx-1.16.1.tar.gz git clone --recursive https://github.com/cloudflare/quiche cd nginx-1.16.1 patch -p01 < ../quiche/extras/nginx/nginx-1.16.patch
そして、HTTP / 3サポートを有効にしてNGINXをコンパイルします。
./configure \ --prefix=$PWD \ --with-http_ssl_module \ --with-http_v2_module \ --with-http_v3_module \ --with-openssl=../quiche/deps/boringssl \ --with-quiche=../quiche make
コンパイル中、TLSサポートはBoringSSLライブラリ( "–with-openssl = .. / quiche / deps / boringssl")に基づいている必要があり、OpenSSLの使用はまだサポートされていません。
構成で接続を受け入れるには、「quic」フラグを指定してリスナーディレクティブを追加する必要があります。