ngx_http_v2_module 模組
ngx_http_v2_module
模組 (1.9.5) 提供了 HTTP/2 的支援。
此模組預設不會編譯,應使用 --with-http_v2_module
設定參數啟用。
已知問題
在 1.9.14 版本之前,無論 proxy_request_buffering、fastcgi_request_buffering、uwsgi_request_buffering 和 scgi_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 |
---|---|
預設 |
http2 off; |
上下文 |
http , server |
此指令出現於 1.25.1 版本。
啟用 HTTP/2 協定。
語法 |
http2_body_preread_size |
---|---|
預設 |
http2_body_preread_size 64k; |
上下文 |
http , server |
此指令出現於 1.11.0 版本。
設定每個請求的緩衝區 size
,請求主體可能會儲存在其中,然後才開始處理。
語法 |
http2_chunk_size |
---|---|
預設 |
http2_chunk_size 8k; |
上下文 |
http , server , location |
設定回應主體分割成的區塊最大大小。值太低會導致更高的負擔。值太高會因 隊首阻塞 而損害優先順序。
語法 |
http2_idle_timeout |
---|---|
預設 |
http2_idle_timeout 3m; |
上下文 |
http , server |
此指令自 1.19.7 版本起已過時。應改用 keepalive_timeout 指令。
設定連線關閉後的非作用逾時時間。
語法 |
http2_max_concurrent_pushes |
---|---|
預設 |
http2_max_concurrent_pushes 10; |
上下文 |
http , server |
此指令出現於 1.13.9 版本。
此指令自 1.25.1 版本起已過時。
限制連線中並行 push 請求的最大數量。
語法 |
http2_max_concurrent_streams |
---|---|
預設 |
http2_max_concurrent_streams 128; |
上下文 |
http , server |
設定連線中並行 HTTP/2 資料流的最大數量。
語法 |
http2_max_field_size |
---|---|
預設 |
http2_max_field_size 4k; |
上下文 |
http , server |
此指令自 1.19.7 版本起已過時。應改用 large_client_header_buffers 指令。
限制 HPACK 壓縮請求標頭欄位的最大大小。此限制同時適用於名稱和值。請注意,如果套用霍夫曼編碼,則解壓縮的名稱和值字串的實際大小可能會更大。對於大多數請求,預設限制應該足夠。
語法 |
http2_max_header_size |
---|---|
預設 |
http2_max_header_size 16k; |
上下文 |
http , server |
此指令自 1.19.7 版本起已過時。應改用 large_client_header_buffers 指令。
限制 HPACK 解壓縮後整個請求標頭列表的最大大小。對於大多數請求,預設限制應該足夠。
語法 |
http2_max_requests |
---|---|
預設 |
http2_max_requests 1000; |
上下文 |
http , server |
此指令出現於 1.11.6 版本。
此指令自 1.19.7 版本起已過時。應改用 keepalive_requests 指令。
設定可透過一個 HTTP/2 連線服務的最大請求數(包括 push 請求),之後下一個用戶端請求會導致連線關閉,且需要建立新的連線。
定期關閉連線對於釋放每個連線的記憶體配置是必要的。因此,使用過高的最大請求數可能會導致過多的記憶體使用,不建議這樣做。
語法 |
http2_push |
---|---|
預設 |
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 |
---|---|
預設 |
http2_push_preload off; |
上下文 |
http , server , location |
此指令出現於 1.13.9 版本。
此指令自 1.25.1 版本起已過時。
啟用將回應標頭欄位中指定的 preload 連結 自動轉換為 push 請求。
語法 |
http2_recv_buffer_size |
---|---|
預設 |
http2_recv_buffer_size 256k; |
上下文 |
http |
設定每個 worker 輸入緩衝區的大小。
語法 |
http2_recv_timeout |
---|---|
預設 |
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
”,否則為空字串。