Модуль 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_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;
}

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

Если директива ssl_prefer_server_ciphers установлена в значение “on”, шифры должны быть настроены таким образом, чтобы соответствовать чёрному списку RFC 9113, Appendix 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

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

Синтаксис: 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. Ограничение применяется в равной степени как к имени, так и к значению. Если применяется кодирование Хаффмана, то фактический размер распакованных строк имени и значения может быть больше. Ограничение по умолчанию подходит для большинства запросов.

Синтаксис: 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.

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

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

Синтаксис: http2_push uri | off;
Умолчание:
http2_push off;
Контекст: http, server, location

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

Эта директива устарела начиная с версии 1.25.1.

Заблаговременно отправляет (push) запрос к заданному 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.

Разрешает автоматическое преобразование preload links, указанных в полях “Link” заголовка ответа, в push-запросы.

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

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

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

Эта директива устарела начиная с версии 1.19.7. Вместо неё следует использовать директиву client_header_timeout.

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

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

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

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