Поддержка QUIC и HTTP/3
Сборка из исходных файлов Конфигурация Пример конфигурации Устранение неполадок |
Поддержка протоколов QUIC и HTTP/3 доступна начиная с версии 1.25.0. Также, начиная с 1.25.0, поддержка доступна в готовых пакетах для Linux.
Поддержка QUIC и HTTP/3 экспериментальная, поэтому возможно всё.
Сборка из исходных файлов
Сборка настраивается командой configure
.
Подробнее см. в статье Сборка nginx из исходных файлов.
Во время сборки nginx можно включить QUIC и HTTP/3
при помощи конфигурационного параметра
--with-http_v3_module
.
Для сборки nginx рекомендуется библиотека SSL с поддержкой QUIC, например BoringSSL, LibreSSL или QuicTLS. Иначе, при использовании библиотеки OpenSSL, будет использоваться OpenSSL compatibility layer, в котором не поддерживается early data.
При конфигурации nginx с BoringSSL используется следующая команда:
./configure --with-debug --with-http_v3_module --with-cc-opt="-I../boringssl/include" --with-ld-opt="-L../boringssl/build/ssl -L../boringssl/build/crypto"
Кроме того, можно сконфигурировать nginx с QuicTLS:
./configure --with-debug --with-http_v3_module --with-cc-opt="-I../quictls/build/include" --with-ld-opt="-L../quictls/build/lib"
Кроме того, можно сконфигурировать nginx с современной версией LibreSSL:
./configure --with-debug --with-http_v3_module --with-cc-opt="-I../libressl/build/include" --with-ld-opt="-L../libressl/build/lib"
После конфигурации
nginx компилируется и устанавливается с помощью
make
.
Конфигурация
В директиве listen модуля ngx_http_core_module появился новый параметр quic, который позволяет принимать на указанном порту QUIC-соединения.
Вместе с параметром quic
можно также указать параметр
reuseport
для правильной работы с несколькими рабочими процессами.
Список директив см. в модуле ngx_http_v3_module.
Чтобы разрешить проверку адреса:
quic_retry on;
Чтобы разрешить 0-RTT:
ssl_early_data on;
Чтобы разрешить GSO (Generic Segmentation Offloading):
quic_gso on;
Чтобы установить host-ключ для различных токенов:
quic_host_key <filename>;
Для работы QUIC требуется версия протокла TLSv1.3, которая включена по умолчанию в директиве ssl_protocols.
По умолчанию GSO Linux-specific optimization выключена. Включите, если настроен соответствующий сетевой интерфейс, поддерживающий GSO.
Пример конфигурации
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 { # для лучшей совместимости рекомендуется # использовать один порт для quic и https listen 8443 quic reuseport; listen 8443 ssl; ssl_certificate certs/example.com.crt; ssl_certificate_key certs/example.com.key; location / { # для перенаправления браузеров в quic-порт add_header Alt-Svc 'h3=":8443"; ma=86400'; } } }
Устранение неполадок
Приблизительные шаги при обнаружении проблемы:
- Убедитесь, что nginx собран с правильной SSL-библиотекой.
-
Убедитесь, что nginx использует правильную SSL-библиотеку в runtime
(
nginx -V
покажет что именно используется в данный момент). - Убедитесь, что клиент действительно присылает запросы через QUIC. Рекомендуется начать с простого консольного клиента, например ngtcp2, чтобы убедиться, что сервер настроен правильно, и затем попробовать в браузерах, так как браузеры могут быть требовательны к сертификатам.
-
Соберите nginx с поддержкой отладочного лога
и проверьте отладочный лог.
В нём должны содержаться все детали соединения и причины ошибок.
Соответствующие сообщения начинаются с префикса “
quic
” и могут быть по нему отфильтрованы. -
Для детального исследования можно включить дополнительную отладку
при помощи следующих макросов:
NGX_QUIC_DEBUG_PACKETS
,NGX_QUIC_DEBUG_FRAMES
,NGX_QUIC_DEBUG_ALLOC
,NGX_QUIC_DEBUG_CRYPTO
../configure --with-http_v3_module --with-debug --with-cc-opt="-DNGX_QUIC_DEBUG_PACKETS -DNGX_QUIC_DEBUG_CRYPTO"