ngx_http_v2_module 模块

ngx_http_v2_module 模块 (1.9.5) 提供对 HTTP/2 的支持并取代 ngx_http_spdy_module 模块。

这个模块不是默认构建的,它应该使用 --with-http_v2_module 配置参数启用。

已知的问题

在 1.9.14 版之前,无论 proxy_request_buffering、fastcgi_request_buffering、uwsgi_request_buffering 和 scgi_request_buffring 指令值如何,都无法禁用客户端请求正文。

在 1.19.1 版之前,linging_close 机制不用于控制关闭 HTTP/2 连接。

示例配置

server {
    listen 443 ssl http2;
    ssl_certificate server.crt;
    ssl_certificate_key server.key;
}

请注意,接受 TLS 上的 HTTP/2 连接需要 “应用层协议协商” (ALPN) TLS 扩展支持,该支持从 OpenSSL 版本 1.0.2 开始就可用。

另请注意,如果 ssl_prefer_server_ciphers 指令设置为值 “on”,则密码应配置为符合 RFC 7540 (附录A黑名单),并受客户端支持。

指令

http2_body_preread_size 指令

语 法:http2_body_preread_size size;
默认值:http2_body_preread_size 64k;
上下文:http, server

此指令出现在版本 1.11.0 中。

设置每个请求的缓冲区大小,在开始处理请求正文之前可以在其中保存请求正文。

http2_chunk_size 指令

语 法:http2_chunk_size size;
默认值:http2_chunk_size 8k;
上下文:http, server, location

设置响应正文被分割成的块的最大大小。值太低会导致较高的开销。过高的值会由于HOL阻止而影响优先顺序。

http2_idle_timeout 指令

语 法:http2_idle_timeout time;
默认值:http2_idle_timeout 3m;
上下文:http, server

此指令从版本 1.19.7 起已过时。

应该改用 keepalive_timeout 指令,设置连接关闭之前的非活动超时时间。

http2_max_concurrent_pushes 指令

语 法:http2_max_concurrent_pushes number;
默认值:http2_max_concurrent_pushes 10;
上下文:http, server

此指令出现在版本1.13.9中。

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

http2_max_concurrent_streams 指令

语 法:http2_max_concurrent_streams number;
默认值:http2_max_concurrent_streams 128;
上下文:http, server

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

http2_max_field_size 指令

语 法:http2_max_field_size size;
默认值:http2_max_field_size 4k;
上下文:http, server

此指令从版本 1.19.7 起已过时。

应该改用 large_client_header_buffers 指令,限制HPACK压缩的请求标头字段的最大大小。这一限制同样适用于名称和值。

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

http2_max_header_size 指令

语 法:http2_max_header_size size;
默认值:http2_max_header_size 16k;
上下文:http, server

此指令从版本 1.19.7 起已过时。

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

http2_max_requests 指令

语 法:http2_max_requests number;
默认值:http2_max_requests 1000;
上下文:http, server

此指令出现在版本 1.11.6 中。

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

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

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

http2_push 指令

语 法:http2_push uri | off;
默认值:http2_push off;
上下文:http, server, location

此指令出现在版本 1.13.9 中。

抢占地将请求与对原始请求的响应一起发送(推送)到指定的URI。

仅处理具有绝对路径的相对 URI,例如:

http2_Push/static/css/main.css;

URI值可以包含变量。

可以在同一配置级别上指定几个 http2_ush 指令。

off 参数取消从上一个配置级别继承的 http2_ush 指令的效果。

http2_push_preload 指令

语 法:http2_push_preload on | off;
默认值:http2_push_preload off;
上下文:http, server, location

此指令出现在版本 1.13.9 中。

启用自动将 “Link” 响应头字段中指定的预加载链接转换为推送请求。

http2_recv_buffer_size 指令

语 法:http2_recv_buffer_size size;
默认值:http2_recv_buffer_size 256k;
上下文:http

设置每工作进程输入缓冲区的大小。

http2_recv_timeout 指令

语 法:http2_recv_timeout time;
默认值: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”,否则为空字符串。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号