Модуль ngx_http_v2_module

Известные проблемы
Пример конфигурации
Директивы
     http2_chunk_size
     http2_body_preread_size
     http2_idle_timeout
     http2_max_concurrent_streams
     http2_max_field_size
     http2_max_header_size
     http2_max_requests
     http2_recv_buffer_size
     http2_recv_timeout
Встроенные переменные

Модуль 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_buffering.

Пример конфигурации

server {
    listen 443 ssl http2;

    ssl_certificate server.crt;
    ssl_certificate_key server.key;
}

Чтобы принимать HTTP/2-соединения по TLS, необходимо наличие поддержки расширения “Application-Layer Protocol Negotiation” (ALPN) протокола TLS, появившейся лишь в OpenSSL версии 1.0.2. Работа расширения “Next Protocol Negotiation” (NPN) протокола TLS (поддерживаемого начиная с OpenSSL версии 1.0.1) в данном случае не гарантируется.

Если директива ssl_prefer_server_ciphers установлена в значение “on”, шифры должны быть настроены таким образом, чтобы соответствовать чёрному списку RFC 7540, Appendix A, а также поддерживаться клиентами.

Директивы

Синтаксис: http2_chunk_size размер;
Умолчание:
http2_chunk_size 8k;
Контекст: http, server, location

Задаёт максимальный размер частей, на которое будет разделяться тело ответа. Слишком маленькое значение может привести к росту накладных расходов. Слишком большое значение может негативно сказаться на приоритизации из-за блокировки очереди.

Синтаксис: http2_body_preread_size размер;
Умолчание:
http2_body_preread_size 64k;
Контекст: http, server

Эта директива появилась в версии 1.11.0.

Задаёт размер буфера для каждого запроса, в который может сохраняться тело запроса до того, как оно начнёт обрабатываться.

Синтаксис: http2_idle_timeout время;
Умолчание:
http2_idle_timeout 3m;
Контекст: http, server

Задаёт таймаут неактивности, после которого соединение закрывается.

Синтаксис: http2_max_concurrent_streams число;
Умолчание:
http2_max_concurrent_streams 128;
Контекст: http, server

Задаёт максимальное число параллельных HTTP/2-потоков в соединении.

Синтаксис: http2_max_field_size размер;
Умолчание:
http2_max_field_size 4k;
Контекст: http, server

Ограничивает максимальный размер заголовка запроса, сжатого при помощи HPACK. Ограничение применяется в равной степени как к имени, так и к значению. Если применяется кодирование Хаффмана, то фактический размер распакованных строк имени и значения может быть больше. Ограничение по умолчанию подходит для большинства запросов.

Синтаксис: http2_max_header_size размер;
Умолчание:
http2_max_header_size 16k;
Контекст: http, server

Ограничивает максимальный размер всего списка заголовков запроса после распаковки HPACK. Ограничение по умолчанию подходит для большинства запросов.

Синтаксис: http2_max_requests число;
Умолчание:
http2_max_requests 1000;
Контекст: http, server, location

Эта директива появилась в версии 1.11.6.

Задаёт максимальное число запросов, которые можно сделать по одному соединению HTTP/2, после чего соединение закрывается и клиенту необходимо использовать новое соединение.

Синтаксис: http2_recv_buffer_size размер;
Умолчание:
http2_recv_buffer_size 256k;
Контекст: http

Задаёт размер входного буфера для рабочего процесса.

Синтаксис: http2_recv_timeout время;
Умолчание:
http2_recv_timeout 30s;
Контекст: http, server

Задаёт таймаут в случае, когда от клиента ожидаются ещё данные, после которого соединение закрывается.

Встроенные переменные

Модуль ngx_http_v2_module поддерживает следующие встроенные переменные:

$http2
согласованный идентификатор протокола: “h2” для HTTP/2 через TLS, “h2c” для HTTP/2 через незашифрованный TCP, либо пустая строка.