До основного вмісту

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 у браузері, а не мається на увазі.
← Назад до бази знань Поставити питання підтримці