模块 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中。
设置在开始处理请求体之前可能保存的每个请求的缓冲区大小。
语法: | 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版本起,此指令已废弃。
在响应原始请求时,预先发送(pushes)到指定的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”响应头字段中指定的预加载链接自动转换为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.