模块 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;
上下文 httpserver

此指令出现在 1.25.1 版本中。

启用 HTTP/2 协议。

语法 http2_body_preread_size size;
默认值
http2_body_preread_size 64k;
上下文 httpserver

此指令出现在 1.11.0 版本中。

设置每个请求的缓冲区 size,在开始处理请求主体之前,可以在其中保存请求主体。

语法 http2_chunk_size size;
默认值
http2_chunk_size 8k;
上下文 httpserverlocation

设置响应主体被切分成块的最大大小。值太低会导致更高的开销。值太高会因 HOL 阻塞 而损害优先级。

语法 http2_idle_timeout time;
默认值
http2_idle_timeout 3m;
上下文 httpserver

自 1.19.7 版本起,此指令已过时。应改用 keepalive_timeout 指令。

设置非活动超时,在此超时后关闭连接。

语法 http2_max_concurrent_pushes number;
默认值
http2_max_concurrent_pushes 10;
上下文 httpserver

此指令出现在 1.13.9 版本中。

自 1.25.1 版本起,此指令已过时。

限制连接中并发 push 请求的最大数量。

语法 http2_max_concurrent_streams number;
默认值
http2_max_concurrent_streams 128;
上下文 httpserver

设置连接中并发 HTTP/2 流的最大数量。

语法 http2_max_field_size size;
默认值
http2_max_field_size 4k;
上下文 httpserver

自 1.19.7 版本起,此指令已过时。应改用 large_client_header_buffers 指令。

限制 HPACK 压缩的请求报头字段的最大大小。此限制同样适用于名称和值。请注意,如果应用了霍夫曼编码,则解压缩的名称和值字符串的实际大小可能更大。对于大多数请求,默认限制应该足够了。

语法 http2_max_header_size size;
默认值
http2_max_header_size 16k;
上下文 httpserver

自 1.19.7 版本起,此指令已过时。应改用 large_client_header_buffers 指令。

限制 HPACK 解压缩后整个请求报头列表的最大大小。对于大多数请求,默认限制应该足够了。

语法 http2_max_requests number;
默认值
http2_max_requests 1000;
上下文 httpserver

此指令出现在 1.11.6 版本中。

自 1.19.7 版本起,此指令已过时。应改用 keepalive_requests 指令。

设置可通过一个 HTTP/2 连接服务的最大请求数(包括 push 请求),在此之后,下一个客户端请求将导致连接关闭,并且需要建立新连接。

定期关闭连接对于释放每个连接的内存分配是必要的。因此,使用过高的最大请求数可能会导致过度使用内存,因此不建议使用。

语法 http2_push uri | off;
默认值
http2_push off;
上下文 httpserverlocation

此指令出现在 1.13.9 版本中。

自 1.25.1 版本起,此指令已过时。

抢先发送 (推送) 对指定 uri 的请求以及对原始请求的响应。例如,只有带有绝对路径的相对 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 size;
默认值
http2_recv_buffer_size 256k;
上下文 http

设置每个 worker 输入缓冲区的大小。

语法 http2_recv_timeout time;
默认值
http2_recv_timeout 30s;
上下文 httpserver

自 1.19.7 版本起,此指令已过时。应改用 client_header_timeout 指令。

设置期望从客户端获取更多数据的超时,在此超时后关闭连接。

嵌入式变量

ngx_http_v2_module 模块支持以下嵌入式变量

$http2
协商的协议标识符:对于通过 TLS 的 HTTP/2 为“h2”,对于通过明文 TCP 的 HTTP/2 为“h2c”,否则为空字符串。