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

> Как включить HTTP/2 и HTTP/3 через QUIC в Nginx, какая версия нужна и как проверить, что браузер реально использует новый протокол.

## Чем 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](https://www.zevshost.net/ru/kb/nginx-ssl-tls-nastroika/), без которого ни 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](https://www.zevshost.net/ru/kb/nginx-ustanovka-ubuntu-debian/).

## Включение 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.1 | TCP | любая версия |
| HTTP/2 | TCP + TLS | 1.9.5, директива http2 on с 1.25.1 |
| HTTP/3 | QUIC + UDP | 1.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 в браузере, а не предполагается на слово.

---

Источник: https://www.zevshost.net/ru/kb/nginx-http2-http3-quic/
