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_bufferingscgi_request_buffering 指令的值為何,都無法停用用戶端請求主體的緩衝。

在 1.19.1 版本之前,lingering_close 機制並未用於控制關閉 HTTP/2 連線。

範例設定

server {
    listen 443 ssl;

    http2 on;

    ssl_certificate server.crt;
    ssl_certificate_key server.key;
}

請注意,透過 TLS 接受 HTTP/2 連線需要支援「應用層協商」 (ALPN) TLS 擴充功能,此功能自 OpenSSL 1.0.2 版本開始提供。

另請注意,如果 ssl_prefer_server_ciphers 指令設定為值 “on”,則應設定 ciphers,使其符合 RFC 9113 附錄 A 中的黑名單,並且受用戶端支援。

指令

語法 http2 on | off;
預設
http2 off;
上下文 http, server

此指令出現於 1.25.1 版本。

啟用 HTTP/2 協定。

語法 http2_body_preread_size size;
預設
http2_body_preread_size 64k;
上下文 http, server

此指令出現於 1.11.0 版本。

設定每個請求的緩衝區 size,請求主體可能會儲存在其中,然後才開始處理。

語法 http2_chunk_size size;
預設
http2_chunk_size 8k;
上下文 http, server, location

設定回應主體分割成的區塊最大大小。值太低會導致更高的負擔。值太高會因 隊首阻塞 而損害優先順序。

語法 http2_idle_timeout time;
預設
http2_idle_timeout 3m;
上下文 http, server

此指令自 1.19.7 版本起已過時。應改用 keepalive_timeout 指令。

設定連線關閉後的非作用逾時時間。

語法 http2_max_concurrent_pushes number;
預設
http2_max_concurrent_pushes 10;
上下文 http, server

此指令出現於 1.13.9 版本。

此指令自 1.25.1 版本起已過時。

限制連線中並行 push 請求的最大數量。

語法 http2_max_concurrent_streams number;
預設
http2_max_concurrent_streams 128;
上下文 http, server

設定連線中並行 HTTP/2 資料流的最大數量。

語法 http2_max_field_size size;
預設
http2_max_field_size 4k;
上下文 http, server

此指令自 1.19.7 版本起已過時。應改用 large_client_header_buffers 指令。

限制 HPACK 壓縮請求標頭欄位的最大大小。此限制同時適用於名稱和值。請注意,如果套用霍夫曼編碼,則解壓縮的名稱和值字串的實際大小可能會更大。對於大多數請求,預設限制應該足夠。

語法 http2_max_header_size size;
預設
http2_max_header_size 16k;
上下文 http, server

此指令自 1.19.7 版本起已過時。應改用 large_client_header_buffers 指令。

限制 HPACK 解壓縮後整個請求標頭列表的最大大小。對於大多數請求,預設限制應該足夠。

語法 http2_max_requests number;
預設
http2_max_requests 1000;
上下文 http, server

此指令出現於 1.11.6 版本。

此指令自 1.19.7 版本起已過時。應改用 keepalive_requests 指令。

設定可透過一個 HTTP/2 連線服務的最大請求數(包括 push 請求),之後下一個用戶端請求會導致連線關閉,且需要建立新的連線。

定期關閉連線對於釋放每個連線的記憶體配置是必要的。因此,使用過高的最大請求數可能會導致過多的記憶體使用,不建議這樣做。

語法 http2_push uri | off;
預設
http2_push off;
上下文 http, server, location

此指令出現於 1.13.9 版本。

此指令自 1.25.1 版本起已過時。

將請求預先(push)傳送到指定的 uri,並與原始請求的回應一起傳送。只會處理具有絕對路徑的相對 URI,例如

http2_push /static/css/main.css;

uri 值可以包含變數。

可以在相同的設定層級指定數個 http2_push 指令。off 參數會取消從先前的設定層級繼承的 http2_push 指令的效果。

語法 http2_push_preload on | off;
預設
http2_push_preload off;
上下文 http, server, location

此指令出現於 1.13.9 版本。

此指令自 1.25.1 版本起已過時。

啟用將回應標頭欄位中指定的 preload 連結 自動轉換為 push 請求。

語法 http2_recv_buffer_size size;
預設
http2_recv_buffer_size 256k;
上下文 http

設定每個 worker 輸入緩衝區的大小。

語法 http2_recv_timeout time;
預設
http2_recv_timeout 30s;
上下文 http, server

此指令自 1.19.7 版本起已過時。應改用 client_header_timeout 指令。

設定在預期從用戶端接收更多資料的逾時時間,之後連線會關閉。

嵌入變數

ngx_http_v2_module 模組支援以下嵌入變數

$http2
協商的協定識別碼:透過 TLS 的 HTTP/2 為 “h2”,透過純文字 TCP 的 HTTP/2 為 “h2c”,否則為空字串。