Перейти к содержанию

Поддержка HTTP/3 (QUIC)

Начиная с Debian 13 (Trixie), пакет системного OpenSSL включает нативную поддержку QUIC. Это позволяет собирать NGINX с модулем HTTP/3 без использования сторонних SSL‑библиотек, таких как QuicTLS или BoringSSL.

Пакет nginx из этого репозитория использует автоматическое определение поддержки HTTP/3 на этапе сборки, опираясь на заголовки системного OpenSSL.

Где включён HTTP/3

На момент последней проверки доступность HTTP/3 по дистрибутивам выглядит так:

Дистрибутив Версия системного OpenSSL Есть QUIC в OpenSSL? NGINX собран с --with-http_v3_module? Поддержка HTTP/3 Причина
Debian 13 (Trixie) OpenSSL 3.5.4 30 Sep 2025 Да (есть QUIC‑API) Да Включён OpenSSL ≥ 3.2 с QUIC; debian/detect-http3.sh возвращает --with-http_v3_module, и тесты с curl --http3 успешны.
Debian 12 (Bookworm) OpenSSL 3.0.17 1 Jul 2025 Нет (QUIC отсутствует) Нет Выключен OpenSSL 3.0.x без QUIC; детектор не включает HTTP/3, поэтому сборка идёт без --with-http_v3_module.
Ubuntu 24.04 (Noble) OpenSSL 3.0.13 30 Jan 2024 Нет (QUIC отсутствует) Нет Выключен OpenSSL 3.0.x, но без QUIC‑API; детектор оставляет HTTP/3 выключенным.
Ubuntu 22.04 (Jammy) OpenSSL 3.0.2 15 Mar 2022 Нет (QUIC отсутствует) Нет Выключен Та же ситуация: OpenSSL 3.0.x без QUIC, поэтому HTTP/3 не компилируется.
Ubuntu 20.04 (Focal) OpenSSL 1.1.1f 31 Mar 2020 Нет (слишком старый) Нет Выключен OpenSSL 1.1.1 вообще не содержит QUIC; детектор однозначно отключает HTTP/3.

Проверка поддержки HTTP/3

После установки nginx можно проверить, собран ли бинарник с поддержкой HTTP/3:

nginx -V

Найдите в строке configure arguments флаг --with-http_v3_module. Если он присутствует — поддержка HTTP/3 включена.

Минимальная конфигурация HTTP/3

Чтобы включить HTTP/3, настройте серверный блок, который слушает порт 443 по QUIC (UDP) и обычный HTTPS (TCP). Убедитесь, что межсетевой экран (firewall) пропускает UDP 443, а не только TCP.

events {
    worker_connections 1024;
}

http {
    access_log off;

    server {
        # HTTP/3 (QUIC) на UDP‑порту 443
        listen 443 quic reuseport;

        # Обычный HTTPS на TCP‑порту 443 (fallback)
        listen 443 ssl;

        ssl_certificate     /path/to/cert.pem;
        ssl_certificate_key /path/to/key.pem;

        # TLSv1.3 обязателен для QUIC
        ssl_protocols TLSv1.3;

        # Реклама поддержки HTTP/3 через заголовок Alt-Svc
        location / {
            add_header Alt-Svc 'h3=":443"; ma=86400';
            return 200 'HTTP/3 works!';
        }
    }
}

Ключевые директивы

  • listen 443 quic reuseport;: включает слушатель QUIC (UDP). Параметр reuseport рекомендуется при нескольких worker‑процессах.
  • ssl_protocols TLSv1.3;: QUIC требует только TLS 1.3.
  • add_header Alt-Svc ...: сообщает клиентам о доступности HTTP/3.

Тестирование HTTP/3

Через curl

Используйте современный curl с поддержкой HTTP/3 (например, из Debian 13):

curl -v --http3 https://your-server.example

В выводе вы должны увидеть строку вида:

* using HTTP/3

Через браузер

Большинство современных браузеров (Chrome, Firefox, Edge) поддерживают HTTP/3. В инструментах разработчика на вкладке Network в колонке протокола для запросов к сайту должен отображаться h3.

Межсетевой экран и контейнеры

Поскольку HTTP/3 использует UDP 443, в правилах брандмауэра нужно открыть и TCP, и UDP на этом порту.

  • Debian (nftables) — минимальный пример:
sudo apt-get install nftables
sudo systemctl enable --now nftables

sudo tee /etc/nftables.conf >/dev/null << 'EOF'
table inet filter {
  chain input {
    type filter hook input priority 0; policy drop;

    iif lo accept                           # loopback
    ct state established,related accept     # уже установленные соединения

    tcp dport 22 accept                     # SSH (опционально)
    tcp dport { 80, 443 } accept            # HTTP / HTTPS
    udp dport 443 accept                    # HTTP/3 (QUIC)

    ip protocol icmp accept
    ip6 nexthdr icmpv6 accept
  }
}
EOF

sudo nft -f /etc/nftables.conf
  • Ubuntu (ufw) — с использованием профиля приложения из пакета (предпочтительный вариант):
# После установки пакета nginx из этого репозитория
sudo ufw allow "Nginx QUIC"
sudo ufw reload

При желании порты можно открыть и явно:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 443/udp
sudo ufw reload

Если вы запускаете NGINX с HTTP/3 в Docker, не забудьте пробросить оба протокола из контейнера:

docker run   -p 443:443/tcp   -p 443:443/udp   your-nginx-http3-image

Совместите это с правилами на хосте, чтобы трафик HTTP/3 действительно доходил до NGINX.