Модуль 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_buffering.
До версии 1.19.1 механизм lingering_close не использовался в управлении закрытием HTTP/2-соединений.
Пример конфигурации
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.
Если
директива ssl_prefer_server_ciphers
установлена в значение “on
”,
шифры
должны быть настроены таким образом, чтобы соответствовать чёрному списку
RFC 7540, Appendix A,
а также поддерживаться клиентами.
Директивы
Синтаксис: |
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.
Ограничивает максимальное число параллельных 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 |
---|---|
Умолчание: |
http2_push off; |
Контекст: |
http , server , location |
Эта директива появилась в версии 1.13.9.
Заблаговременно отправляет
(push) запрос
к заданному 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.
Разрешает автоматическое преобразование 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, либо пустая строка.