QUICとHTTP/3のサポート
| ソースからのビルド 構成 構成の例 トラブルシューティング |
1.25.0以降でQUICおよびHTTP/3プロトコルのサポートが利用できるようになりました。また、1.25.0以降、QUICとHTTP/3のサポートはLinuxのバイナリパッケージで利用できます。
QUICおよびHTTP/3のサポートは実験段階であり、利用者注意が必要です。
ソースからのビルド
ビルドはconfigureコマンドを使用して構成します。詳細については、ソースからのnginxのビルドを参照してください。
nginxの構成時に、--with-http_v3_module構成パラメータを使用してQUICとHTTP/3を有効にすることができます。
BoringSSL、LibreSSL、QuicTLSなどのQUICをサポートするSSLライブラリを使用してnginxをビルドすることをお勧めします。そうしないと、OpenSSL互換レイヤーが使用され、初期データがサポートされなくなります。
次のコマンドを使用してBoringSSLを使用してnginxを構成します。
./configure
--with-debug
--with-http_v3_module
--with-cc-opt="-I../boringssl/include"
--with-ld-opt="-L../boringssl/build/ssl
-L../boringssl/build/crypto"
または、QuicTLSを使用してnginxを構成できます。
./configure
--with-debug
--with-http_v3_module
--with-cc-opt="-I../quictls/build/include"
--with-ld-opt="-L../quictls/build/lib"
または、最新バージョンのLibreSSLを使用してnginxを構成できます。
./configure
--with-debug
--with-http_v3_module
--with-cc-opt="-I../libressl/build/include"
--with-ld-opt="-L../libressl/build/lib"
構成後、nginxはmakeを使用してコンパイルおよびインストールされます。
構成
ngx_http_core_moduleモジュールのlistenディレクティブに、指定されたポートでHTTP/3 over QUICを有効にする新しいパラメータquicが追加されました。
quicパラメータだけでなく、reuseportパラメータを指定して、複数のワーカーで適切に機能させることもできます。
ディレクティブのリストについては、ngx_http_v3_moduleを参照してください。
アドレス検証を有効にする
quic_retry on;
0-RTTを有効にする
ssl_early_data on;
GSO(Generic Segmentation Offloading)を有効にする
quic_gso on;
さまざまなトークンのホストキーを設定する
quic_host_key <filename>;
QUICには、ssl_protocolsディレクティブでデフォルトで有効になっているTLSv1.3プロトコルバージョンが必要です。
デフォルトでは、GSOのLinux固有の最適化は無効になっています。対応するネットワークインターフェイスがGSOをサポートするように構成されている場合は、有効にしてください。
構成の例
http {
log_format quic '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" "$http3"';
access_log logs/access.log quic;
server {
# for better compatibility it's recommended
# to use the same port for quic and https
listen 8443 quic reuseport;
listen 8443 ssl;
ssl_certificate certs/example.com.crt;
ssl_certificate_key certs/example.com.key;
location / {
# required for browsers to direct them to quic port
add_header Alt-Svc 'h3=":8443"; ma=86400';
}
}
}
トラブルシューティング
問題の特定に役立つヒント
- nginxが適切なSSLライブラリを使用して構築されていることを確認します。
- nginxが実行時に適切なSSLライブラリを使用していることを確認します(
nginx -Vは現在使用されているものを示します)。 - クライアントが実際にQUIC経由でリクエストを送信していることを確認します。証明書に関して非常にうるさい可能性のある実際のブラウザを試す前に、正しく構成されていることを確認するために、ngtcp2などのシンプルなコンソールクライアントから始めることをお勧めします。
- nginxをデバッグサポートを使用してビルドし、デバッグログを確認します。接続とその失敗の理由に関する詳細がすべて含まれているはずです。関連するメッセージはすべて「
quic」プレフィックスを含み、簡単にフィルターアウトできます。 - 詳細な調査のために、以下のマクロを使用して追加のデバッグを有効にすることができます:
NGX_QUIC_DEBUG_PACKETS、NGX_QUIC_DEBUG_FRAMES、NGX_QUIC_DEBUG_ALLOC、NGX_QUIC_DEBUG_CRYPTO。./configure --with-http_v3_module --with-debug --with-cc-opt="-DNGX_QUIC_DEBUG_PACKETS -DNGX_QUIC_DEBUG_CRYPTO"