Модуль ngx_http_v3_module
Модуль 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 |
|---|---|
| Умолчание: |
http3 on; |
| Контекст: |
http, server |
Разрешает согласование протокола HTTP/3.
| Синтаксис: |
http3_hq |
|---|---|
| Умолчание: |
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 |
|---|---|
| Умолчание: |
quic_bpf off; |
| Контекст: |
main |
Разрешает маршрутизацию пакетов QUIC при помощи eBPF. Если маршрутизация включена, то обеспечивается поддержка миграции QUIC-соединений.
Директива поддерживается только на Linux 5.7+.
| Синтаксис: |
quic_gso |
|---|---|
| Умолчание: |
quic_gso off; |
| Контекст: |
http, server |
Разрешает отправку оптимизированного пакетного режима при помощи segmentation offloading.
Оптимизированная отправка поддерживается только на Linux
с поддержкой UDP_SEGMENT.
| Синтаксис: |
quic_host_key |
|---|---|
| Умолчание: | — |
| Контекст: |
http, server |
Задаёт файл с секретным ключом, применяемым при шифровании
stateless reset и address validation токенов.
По умолчанию создаётся случайный ключ при каждой перезагрузке.
Токены, созданные при помощи старых ключей, не принимаются.
| Синтаксис: |
quic_retry |
|---|---|
| Умолчание: |
quic_retry off; |
| Контекст: |
http, server |
Разрешает функциональность
QUIC
Address Validation,
в том числе отправку нового токена в Retry-пакете
или NEW_TOKEN frame
и
валидацию токена, полученного в Initial-пакете.
Встроенные переменные
Модуль ngx_http_v3_module
поддерживает следующие встроенные переменные:
$http3-
согласованный идентификатор протокола:
“
h3” для HTTP/3-соединений, “hq” для hq-соединений, либо пустая строка.
