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