Модуль ngx_http_v3_module

Известные проблемы
Пример конфигурации
Директивы
     http3
     http3_hq
     http3_max_concurrent_streams
     http3_stream_buffer_size
     quic_active_connection_id_limit
     quic_bpf
     quic_gso
     quic_host_key
     quic_retry
Встроенные переменные

Модуль ngx_http_v3_module (1.25.0) обеспечивает экспериментальную поддержку HTTP/3.

По умолчанию этот модуль не собирается, его сборку необходимо разрешить с помощью конфигурационного параметра --with-http_v3_module.

Для сборки и работы этого модуля рекомендуется использовать библиотеку SSL с поддержкой QUIC, например BoringSSL, LibreSSL, QuicTLS. Иначе, при использовании библиотеки OpenSSL, будет использоваться OpenSSL compatibility layer, в котором не поддерживается early data.

Известные проблемы

Модуль экспериментальный, поэтому возможно всё.

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

http {
    log_format quic '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent" "$http3"';

    access_log logs/access.log quic;

    server {
        # для лучшей совместимости рекомендуется
        # использовать одинаковый порт для http/3 и https
        listen 8443 quic reuseport;
        listen 8443 ssl;

        ssl_certificate     certs/example.com.crt;
        ssl_certificate_key certs/example.com.key;

        location / {
            # используется для объявления о поддержке http/3
            add_header Alt-Svc 'h3=":8443"; ma=86400';
        }
    }
}

Чтобы принимать HTTP/3-соединения по TLS, необходимо наличие поддержки протокола TLSv1.3, появившейся в OpenSSL версии 1.1.1.

Директивы

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

Разрешает согласование протокола HTTP/3.

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

Разрешает согласование протокола HTTP/0.9, используемого в функциональных тестах QUIC.

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

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

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

Задаёт размер буфера, используемого для чтения и записи QUIC-потоков.

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

Устанавливает значение транспортного параметра QUIC active_connection_id_limit. Это максимальное значение ID соединений, возможное для хранения на сервере.

Синтаксис: quic_bpf on | off;
Умолчание:
quic_bpf off;
Контекст: main

Разрешает маршрутизацию пакетов QUIC при помощи eBPF. Если маршрутизация включена, то обеспечивается поддержка миграции QUIC-соединений.

Директива поддерживается только на Linux 5.7+.

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

Разрешает отправку оптимизированного пакетного режима при помощи segmentation offloading.

Оптимизированная отправка поддерживается только на Linux с поддержкой UDP_SEGMENT.

Синтаксис: quic_host_key файл;
Умолчание:
Контекст: http, server

Задаёт файл с секретным ключом, применяемым при шифровании stateless reset и address validation токенов. По умолчанию создаётся случайный ключ при каждой перезагрузке. Токены, созданные при помощи старых ключей, не принимаются.

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

Разрешает функциональность QUIC Address Validation, в том числе отправку нового токена в Retry-пакете или NEW_TOKEN frame и валидацию токена, полученного в Initial-пакете.

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

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

$http3
согласованный идентификатор протокола: “h3” для HTTP/3-соединений, “hq” для hq-соединений, либо пустая строка.