К основному содержимому

HTTP/2 и HTTP/3 (QUIC) в Nginx: как включить и проверить

Nginx · 29.09.2026

Чем HTTP/2 и HTTP/3 отличаются от HTTP/1.1

HTTP/1.1 открывает по отдельному TCP-соединению на несколько параллельных запросов и передаёт заголовки текстом при каждом запросе. HTTP/2 мультиплексирует запросы в одном соединении и сжимает заголовки, поэтому страница с десятками мелких файлов загружается быстрее. HTTP/3 идёт дальше — переносит транспорт с TCP на QUIC поверх UDP, из-за чего один потерянный пакет не тормозит все остальные потоки одновременно, как это бывает в HTTP/2.

Для сайта на VDS ZevsHost.net с посетителями через мобильные сети с потерями пакетов переход на HTTP/3 даёт заметный прирост отзывчивости. Для обычного корпоративного сайта на стабильном канале разница между HTTP/2 и HTTP/3 почти незаметна — там важнее правильно настроенный SSL/TLS, без которого ни HTTP/2, ни HTTP/3 не заработают.

Включение HTTP/2 в Nginx

С версии 1.25.1 директива listen ... http2 устарела, вместо неё используется отдельная директива http2 on; внутри server-блока.

server {
    listen 443 ssl;
    http2 on;
    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
}

HTTP/2 работает только поверх TLS в подавляющем большинстве браузеров, поэтому без действующего сертификата директива фактически бесполезна. Версию Nginx можно посмотреть командой nginx -v, а актуальный способ установки актуальной версии на Ubuntu и Debian описан в статье про установку Nginx.

Включение HTTP/3 и QUIC

HTTP/3 требует Nginx, собранный с поддержкой QUIC (начиная с версии 1.25.0 в основной ветке), и открытого UDP-порта в дополнение к TCP.

server {
    listen 443 ssl;
    listen 443 quic reuseport;
    http2 on;
    http3 on;
    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    add_header Alt-Svc 'h3=":443"; ma=86400';
}

Заголовок Alt-Svc сообщает браузеру, что сервер поддерживает HTTP/3 на этом же порту, — без него браузер продолжит подключаться по HTTP/2, даже если QUIC уже настроен. Порт 443/udp обязательно нужно открыть в файрволе отдельно от 443/tcp, иначе соединение просто не установится.

Версии протоколов и требования

ПротоколТранспортМинимум для Nginx
HTTP/1.1TCPлюбая версия
HTTP/2TCP + TLS1.9.5, директива http2 on с 1.25.1
HTTP/3QUIC + UDP1.25.0 со сборкой с поддержкой QUIC

Сборка из стандартного репозитория дистрибутива не всегда включает QUIC — часто нужен официальный репозиторий nginx.org с пакетом, собранным с флагом --with-http_v3_module. Проверить наличие модуля можно командой nginx -V 2>&1 | grep http_v3.

Проверка, что протокол реально используется

  • curl -I --http2 https://example.com/ — в ответе должна быть строка HTTP/2 200.
  • curl -I --http3 https://example.com/ — доступно, если локальный curl собран с поддержкой HTTP/3.
  • Вкладка Network в инструментах разработчика браузера — колонка Protocol показывает h2 или h3.
  • Заголовок ответа Alt-Svc присутствует и указывает на правильный порт.

Если браузер продолжает использовать HTTP/2 после включения HTTP/3, чаще всего проблема в закрытом UDP-порту на файрволе или в отсутствующем заголовке Alt-Svc — TCP-соединение при этом работает нормально, поэтому сайт открывается, но без ускорения от QUIC.

Итог: чек-лист HTTP/2 и HTTP/3 в Nginx

  • В server-блоке указаны http2 on; и, если нужно, http3 on;.
  • Nginx собран с модулем http_v3, если планируется HTTP/3.
  • Порт 443/udp открыт в файрволе отдельно от 443/tcp.
  • Заголовок Alt-Svc добавлен и указывает верный порт.
  • Протокол проверен через curl -I и вкладку Network в браузере, а не предполагается на слово.
← Назад в базу знаний Задать вопрос поддержке