Module ngx_http_v2_module

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

默认情况下未构建此模块,应使用--with-http_v2_module配置参数启用它。

Known Issues

在 1.9.14 版之前,无论proxy_request_bufferingfastcgi_request_bufferinguwsgi_request_bufferingscgi_request_buffering指令值如何,都不能禁用客户端请求正文的缓冲。

在 1.19.1 版之前,没有使用lingering_close机制来控制关闭 HTTP/2 连接。

Example Configuration

server {
    listen 443 ssl http2;

    ssl_certificate server.crt;
    ssl_certificate_key server.key;
}

请注意,通过 TLS 接受 HTTP/2 连接需要“应用程序层协议协商”(ALPN)TLS 扩展支持,该支持仅从OpenSSL版本 1.0.2 起可用。为此,不能保证使用“下一协议协商”(NPN)TLS 扩展(自 OpenSSL 版本 1.0.1 起可用)。

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

Directives

Syntax:http2_body_preread_size size;
Default:http2_body_preread_size 64k;
Context:http , server

该指令出现在 1.11.0 版本中。

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

Syntax:http2_chunk_size size;
Default:http2_chunk_size 8k;
Context:http , server , location

设置将响应主体切成的块的最大大小。太低的值会导致更高的开销。值过高会损害HOL blocking的优先级。

Syntax:http2_idle_timeout time;
Default:http2_idle_timeout 3m;
Context:http , server

设置不活动的超时,然后关闭连接。

Syntax:http2_max_concurrent_pushes number;
Default:http2_max_concurrent_pushes 10;
Context:http , server

该指令出现在版本 1.13.9 中。

限制 Connecting 并发push请求的最大数量。

Syntax:http2_max_concurrent_streams number;
Default:http2_max_concurrent_streams 128;
Context:http , server

设置 Connecting 并发 HTTP/2 流的最大数量。

Syntax:http2_max_field_size size;
Default:http2_max_field_size 4k;
Context:http , server

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

Syntax:http2_max_header_size size;
Default:http2_max_header_size 16k;
Context:http , server

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

Syntax:http2_max_requests number;
Default:http2_max_requests 1000;
Context:http , server

该指令出现在 1.11.6 版本中。

设置可以通过一个 HTTP/2 连接提供服务的最大请求数量(包括push个请求),此后下一个客户端请求将导致连接关闭以及需要构建新连接。

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

Syntax:http2_push uri | off;
Default:http2_push off;
Context:http , server , location

该指令出现在版本 1.13.9 中。

抢先向指定的uri发送(pushes)请求以及对原始请求的响应。仅处理具有绝对路径的相对 URI,例如:

http2_push /static/css/main.css;

uri值可以包含变量。

可以在同一配置级别上指定多个http2_push指令。 off参数取消了从先前配置级别继承的http2_push指令的效果。

Syntax:http2_push_preload on | off;
Default:http2_push_preload off;
Context:http , server , location

该指令出现在版本 1.13.9 中。

启用将“链接”响应标题字段中指定的preload links自动转换为push请求的功能。

Syntax:http2_recv_buffer_size size;
Default:http2_recv_buffer_size 256k;
Context:http

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

Syntax:http2_recv_timeout time;
Default:http2_recv_timeout 30s;
Context:http , server

设置超时,以期从客户端获取更多数据,然后关闭连接。

Embedded Variables

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

$http2

  • 协商的协议标识符:“ h2”表示 TLS 上的 HTTP/2,“ h2c”表示基于明文 TCP 的 HTTP/2,否则为空字符串。