模块 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 |
设置响应体被切分成块的最大大小。值过低会导致更高的开销。值过高会由于 HOL 阻塞而损害优先级。
语法 |
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 压缩的请求头字段的最大大小。此限制同等地应用于名称和值。注意,如果应用了 Huffman 编码,解压后的名称和值字符串的实际大小可能会更大。对于大多数请求,默认限制应该足够。
语法 |
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 版本起已废弃。
预先发送(推送)一个请求到指定的 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 版本起已废弃。
启用将“Link”响应头字段中指定的 preload links 自动转换为 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
”,否则为空字符串。