モジュール ngx_http_v2_module

既知の問題
設定例
ディレクティブ
     http2
     http2_body_preread_size
     http2_chunk_size
     http2_idle_timeout
     http2_max_concurrent_pushes
     http2_max_concurrent_streams
     http2_max_field_size
     http2_max_header_size
     http2_max_requests
     http2_push
     http2_push_preload
     http2_recv_buffer_size
     http2_recv_timeout
埋め込み変数

ngx_http_v2_module モジュール (1.9.5) は、HTTP/2 をサポートしています。

このモジュールはデフォルトではビルドされません。--with-http_v2_module 設定パラメータを使用して有効にする必要があります。

既知の問題

バージョン 1.9.14 より前では、proxy_request_bufferingfastcgi_request_bufferinguwsgi_request_buffering、および scgi_request_buffering ディレクティブの値に関係なく、クライアントリクエストボディのバッファリングを無効にすることができませんでした。

バージョン 1.19.1 より前では、HTTP/2 接続のクローズ制御に lingering_close メカニズムが使用されていませんでした。

設定例

server {
    listen 443 ssl;

    http2 on;

    ssl_certificate server.crt;
    ssl_certificate_key server.key;
}

TLS 経由で HTTP/2 接続を受け入れるには、「Application-Layer Protocol Negotiation」(ALPN) TLS 拡張機能のサポートが必要です。これは OpenSSL バージョン 1.0.2 以降で利用可能です。

ssl_prefer_server_ciphers ディレクティブが「on」に設定されている場合、ciphersRFC 9113、Appendix A のブラックリストに準拠し、クライアントでサポートされているように構成する必要があります。

ディレクティブ

構文 http2 on | off;
デフォルト
http2 off;
コンテキスト httpserver

このディレクティブはバージョン 1.25.1 で追加されました。

HTTP/2 プロトコルを有効にします。

構文 http2_body_preread_size サイズ;
デフォルト
http2_body_preread_size 64k;
コンテキスト httpserver

このディレクティブはバージョン 1.11.0 で追加されました。

リクエストボディが処理を開始する前に保存できる、各リクエストのバッファのサイズを設定します。

構文 http2_chunk_size サイズ;
デフォルト
http2_chunk_size 8k;
コンテキスト httpserverlocation

レスポンスボディを分割するチャンクの最大サイズを設定します。値が小さすぎるとオーバーヘッドが高くなり、大きすぎるとHOLブロッキングにより優先順位付けが阻害されます。

構文 http2_idle_timeout 時間;
デフォルト
http2_idle_timeout 3m;
コンテキスト httpserver

バージョン 1.19.7 以降、このディレクティブは非推奨です。keepalive_timeout ディレクティブを使用してください。

非アクティブタイムアウトを設定します。この時間経過後に接続が閉じられます。

構文 http2_max_concurrent_pushes 数値;
デフォルト
http2_max_concurrent_pushes 10;
コンテキスト httpserver

このディレクティブはバージョン 1.13.9 で追加されました。

バージョン 1.25.1 以降、このディレクティブは非推奨です。

接続内の同時pushリクエストの最大数を制限します。

構文 http2_max_concurrent_streams 数値;
デフォルト
http2_max_concurrent_streams 128;
コンテキスト httpserver

接続内の同時HTTP/2ストリームの最大数を設定します。

構文 http2_max_field_size サイズ;
デフォルト
http2_max_field_size 4k;
コンテキスト httpserver

バージョン 1.19.7 以降、このディレクティブは非推奨です。large_client_header_buffers ディレクティブを使用してください。

HPACK圧縮されたリクエストヘッダフィールドの最大サイズを制限します。この制限は名前と値の両方に適用されます。Huffmanエンコーディングが適用されている場合、解凍された名前と値の文字列の実際のサイズの方が大きくなる可能性があることに注意してください。ほとんどのリクエストでは、デフォルトの制限で十分です。

構文 http2_max_header_size サイズ;
デフォルト
http2_max_header_size 16k;
コンテキスト httpserver

バージョン 1.19.7 以降、このディレクティブは非推奨です。large_client_header_buffers ディレクティブを使用してください。

HPACK解凍後のリクエストヘッダーリスト全体の最大サイズを制限します。ほとんどのリクエストでは、デフォルトの制限で十分です。

構文 http2_max_requests 数値;
デフォルト
http2_max_requests 1000;
コンテキスト httpserver

このディレクティブはバージョン 1.11.6 で追加されました。

バージョン 1.19.7 以降、このディレクティブは非推奨です。keepalive_requests ディレクティブを使用してください。

1つのHTTP/2接続を通じて処理できるリクエスト(pushリクエストを含む)の最大数を設定します。この数を超えると、次のクライアントリクエストにより接続が閉じられ、新しい接続を確立する必要があります。

接続を定期的に閉じることで、接続ごとのメモリ割り当てを解放する必要があります。したがって、リクエストの最大数を非常に大きくすると、過剰なメモリ使用につながる可能性があり、推奨されません。

構文 http2_push uri | off;
デフォルト
http2_push off;
コンテキスト httpserverlocation

このディレクティブはバージョン 1.13.9 で追加されました。

バージョン 1.25.1 以降、このディレクティブは非推奨です。

指定されたuriへのリクエストを、元のリクエストへのレスポンスとともに先行して送信します(push)。絶対パスを持つ相対URIのみが処理されます。例:

http2_push /static/css/main.css;

uriの値には変数を含めることができます。

同じ設定レベルで複数のhttp2_pushディレクティブを指定できます。offパラメータは、前の設定レベルから継承されたhttp2_pushディレクティブの効果を無効にします。

構文 http2_push_preload on | off;
デフォルト
http2_push_preload off;
コンテキスト httpserverlocation

このディレクティブはバージョン 1.13.9 で追加されました。

バージョン 1.25.1 以降、このディレクティブは非推奨です。

「Link」レスポンスヘッダーフィールドに指定されたpreloadリンクpushリクエストに自動的に変換する機能を有効にします。

構文 http2_recv_buffer_size サイズ;
デフォルト
http2_recv_buffer_size 256k;
コンテキスト http

ワーカーごとの入力バッファのサイズを設定します。

構文 http2_recv_timeout 時間;
デフォルト
http2_recv_timeout 30s;
コンテキスト httpserver

バージョン 1.19.7 以降、このディレクティブは非推奨です。client_header_timeout ディレクティブを使用してください。

クライアントからのデータの受信待機タイムアウトを設定します。この時間経過後に接続が閉じられます。

埋め込み変数

ngx_http_v2_module モジュールは、次の埋め込み変数をサポートしています。

$http2
ネゴシエートされたプロトコル識別子:TLS 上の HTTP/2 の場合は「h2」、クリアテキスト TCP 上の HTTP/2 の場合は「h2c」、それ以外の場合は空文字列。