模块 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 大小;
默认值:
http2_body_preread_size 64k;
上下文: http, server

该指令出现在版本1.11.0中。

设置在开始处理请求体之前可能保存的每个请求的缓冲区大小。

语法: 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 uri | off;
默认值:
http2_push off;
上下文: http, server, location

此指令于版本1.13.9中出现。

自1.25.1版本起,此指令已废弃。

在响应原始请求时,预先发送(pushes)到指定的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版本起,此指令已废弃。

启用将“Link”响应头字段中指定的预加载链接自动转换为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
negotiated protocol identifier: “h2” for HTTP/2 over TLS, “h2c” for HTTP/2 over cleartext TCP, or an empty string otherwise.