Поддержка 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"
