原作者:F5のロバート・ヘインズ
元のリンク: NGINX QUIC+HTTP/3 プレビュー バージョンのバイナリ パッケージを入手する
転載元:NGINX公式コミュニティ
NGINX の唯一の公式中国語コミュニティ (すべてnginx.org.cn )
NGINX QUIC+HTTP/3 プレビューが、次の 2 つのディストリビューション用のビルド済みバイナリ パッケージとして利用可能になったことを発表できることを嬉しく思います。
Red Hat Enterprise Linux 9 とそのバイナリ互換性、Ubuntu 22.04。これらのバイナリは、スタンドアロンの nginx-quic リポジトリの quic ブランチからダウンロードできます (ホスト型プレビュー)。以前と同様に、QUIC+HTTP/3 を含む NGINX オープン ソース バージョンのソース コードをダウンロードしてコンパイルすることができ、QUIC をサポートする SSL/TLS ライブラリを選択することもできます。
このコードは現在実験版としてマークされていますが、一部のコミュニティ メンバーは実稼働環境で nginx-quic を使用することに成功したと述べています。
ユーザーが QUIC+HTTP/3 を使用して NGINX をより迅速かつ簡単にテストできるようにするために、プリコンパイルされたバイナリをリリースします。これらのバイナリはソースからコンパイルする必要がなく、標準のパッケージ管理ツールを使用してインストールできます。
この記事の執筆時点では、オープンソースの SSL/TLS 標準として認められている OpenSSL は QUIC をサポートしていません。したがって、quictls ライブラリ パッケージ (依存関係として自動的にインストールされる) を使用してバイナリ ディストリビューションを構築しました。私がクイックルを選択した理由は、安定性、互換性、機能の現時点での最良の組み合わせであるからです。
バイナリ配布のインストール手順については、nginx.org.cnをクリックして詳細をご覧ください。
QUIC+HTTP/3 の NGINX 構成
いくつかの新しいディレクティブを使用して、QUIC+HTTP/3 用に NGINX を構成し、既存の仮想サーバー構成ブロック (server{}) の HTTP/1.1 および HTTP/2 ディレクティブと簡単に組み合わせることができます。
最も基本的な機能構成の場合、次の 3 つのディレクティブをサーバー構成ブロックとサブロケーション構成ブロックに追加するだけで済みます。{}
server ブロックの例は次のとおりです。{}
server {
# for better compatibility we recommend
# using the same port number for QUIC and TCP
listen 443 quic reuseport; # QUIC
listen 443 ssl; # TCP
ssl_certificate certs/example.com.crt;
ssl_certificate_key certs/example.com.key;
ssl_protocols TLSv1.3;
location / {
# advertise that QUIC is available on the configured port
add_header Alt-Svc 'h3=":$server_port"; ma=86400';
#proxy_pass <upstream_group>;
#root /<root_directory>;
}
}
次のような、新しい HTTP/3 関連のオプションのディレクティブと変数 (コード スニペットには示されていません) がいくつかあります。
-
$http3 — (変数) HTTP/3 セッション中にリクエストを送信する場合は h3 に設定します (それ以外の場合は空の文字列)。
-
quic_retry — (ディレクティブ) on に設定すると、リクエスターの IP アドレスを検証するために使用される新しい接続 ID を指定して、リクエスターに QUIC 再試行メッセージを送信するように NGINX に指示します。QUIC 再試行パケットは、接続を検証するために TCP 3 方向接続ハンドシェイクを使用できないことをある程度補います (QUIC は UDP に基づいて実行されるため)。
-
ssl_early_data — (ディレクティブ) が on に設定されているため、クライアントへの接続が以前に確立されていれば、新しい TLS 1.3 接続が確立されると、NGINX は最初のリクエストからビジネス データを取得できます。これは、ゼロ ラウンド トリップ タイム (0-RTT) 接続回復と呼ばれます。「初期データ」の送信のサポートは、TLS ハンドシェイクに必要な追加の往復メッセージのやり取りを排除することで、QUIC+HTTP/3 のパフォーマンスを向上させる TLS 1.3 の機能です。
注: GET 以外の HTTP リクエスト メソッドが使用されている場合、以前のデータはリプレイ攻撃の対象となるため、0-RTT 接続の回復はセキュリティ リスクを引き起こす可能性があります。
この図は、クライアントが NGINX への QUIC 接続を再開するときに最初のメッセージで HTTP リクエストを送信できるため、QUIC+HTTP/3 を使用した 0‑RTT 接続の回復がパフォーマンスの向上にどのように役立つかを示しています。
対照的に、TLS を使用する TCP 接続の場合、クライアントは NGINX との新しい TLS ハンドシェイクを実行して安全な接続を確立する必要があり、これには複数の追加パケット対話が必要です。
QUIC+HTTP/3 を使用した NGINX のテスト
上で述べたように、プリコンパイルされたバイナリをリリースする理由の 1 つは、NGINX が HTTP/3 トラフィックを正しく処理するかどうかのテストを容易にすることです。単純なコマンド ライン テストの場合は、HTTP/3 をサポートするcurl コマンドを構築するか、事前に構築されたコンテナを使用できます。さらに、ほとんどの新しいブラウザは QUIC+HTTP/3 をサポートしています。
QUIC 対応サイトがブラウザの HTTP/3 接続リクエストを満たしていることを確認するには、ブラウザの開発者ツールを使用して、NGINX から返された HTTP 応答ヘッダーを調べることができます。
TCP を介したブラウザの最初の HTTP リクエストに応じて NGINX が上記の Alt-Svc レスポンス ヘッダーを含めている場合、QUIC+HTTP/3 は適切に機能しています。
このとき、QUICをサポートするブラウザはAlt-Svcディレクティブで指定されたポート上でQUIC接続を確立し、以降のHTTPリクエストとレスポンスはQUICに基づきます。
QUIC+HTTP/3 が使用されていることを確認するもう 1 つの方法は、$server-protocol 変数によってキャプチャされたプロトコルにカスタム HTTP ヘッダーの値を設定する別の add_header ディレクティブを追加することです。
レスポンスヘッダーの値を追跡することで、使用されているプロトコルを特定することができ、レスポンスヘッダーが HTTP/1.x (QUIC 接続確立前) から HTTP/3.0 (QUIC 使用時) に変化すると、現在 QUIC が使用されていることがわかります。 。
以下は、HTTP 応答ヘッダーを X プロトコルにカスタマイズする場所設定ブロックの例です。
location / {
# advertise that QUIC is available on the configured port
add_header Alt-Svc 'h3=":$server_port"; ma=86400';
# signal whether we are using QUIC+HTTP/3
add_header X-protocol $server_protocol always;
#proxy_pass <upstream_group>;
#root /<root_directory>;
}
さらに、Chrome HTTP Indicator 拡張機能など、使用中のプロトコルを視覚的に表示できるツールもあります。(これはブラウザ拡張機能の推奨を構成するものではないことに注意してください。拡張機能が特定の状況で引き起こす可能性のあるセキュリティ リスクに注意する必要があります)。
次のステップ
今後数週間で QUIC+HTTP/3 ソリューションの提供を継続し、NGINX 最適化の例をさらに提供する予定です。それまでの間、参考のためにテスト結果を共有してください。NGINX 開発メーリング リストおよび NGINX 公式 WeChat グループでフィードバックを共有できます。
次の主要なマイルストーン (nginx-quic リポジトリをメインライン NGINX オープン ソース ブランチにマージする) を含む、QUIC+HTTP/3 関連の作業に関する最新の更新情報を入手するには、NGINX 発表メーリング リストに登録してください。
NGINX 開発メーリング リスト:
https://mailman.nginx.org/mailman/listinfo/nginx-devel
NGINX 発表メーリング リスト:
https://mailman.nginx.org/mailman/listinfo/nginx-announce
NGINX の唯一の公式中国語コミュニティ (すべてnginx.org.cn )
NGINX 関連のその他の技術情報、インタラクティブな Q&A、一連のコース、およびイベント リソース:
- オープンソースコミュニティ公式Webサイト:https ://www.nginx.org.cn/
- WeChat 公開アカウント: https://mp.weixin.qq.com/s/XVE5