Настройка HTTP/3 (QUIC) в Nginx: сборка, конфиг listen quic и заголовок Alt-Svc
- Клиенты не используют протокол HTTP/3, продолжая работать по TCP (HTTP/1.1 или HTTP/2).
- В логах Nginx ошибки
unknown directive "quic"при использовании устаревших версий без модуляngx_http_v3_module. - UDP-пакеты блокируются межсетевым экраном (iptables/nftables/UFW/AWS Security Group) на порту 443.
1. Проверка поддержки HTTP/3 в установленном Nginx
nginx -V 2>&1 | grep -o -- "--with-http_v3_module"(Поддержка HTTP/3 официально включена в стабильные релизы Nginx >= 1.25.0).
2. Открытие UDP порта 443 в файрволе
# UFW (Ubuntu/Debian)
ufw allow 443/udp
# Firewalld (RHEL/Rocky)
firewall-cmd --permanent --add-port=443/udp && firewall-cmd --reload3. Конфигурация виртуального хоста Nginx для HTTP/3
Отредактируйте файл конфигурации сайта (например, /etc/nginx/conf.d/quic.conf):
server {
# Стандартный TCP порт для HTTP/1.1 и HTTP/2
listen 443 ssl;
listen [::]:443 ssl;
# UDP порт для HTTP/3 (QUIC)
listen 443 quic reuseport;
listen [::]:443 quic reuseport;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# QUIC строго требует протокол TLSv1.3
ssl_protocols TLSv1.2 TLSv1.3;
# Анонсирование поддержки HTTP/3 для браузеров
add_header Alt-Svc 'h3=":443"; ma=86400' always;
# Тюнинг QUIC
quic_retry on;
quic_gso on;
ssl_early_data on;
location / {
# Добавление диагностического заголовка
add_header X-Protocol $server_protocol always;
root /var/www/html;
index index.html;
}
}4. Валидация и перезапуск сервиса
nginx -t && systemctl restart nginx Частые вопросы (FAQ)
Зачем нужен заголовок Alt-Svc (Alternative Service)?
Браузер не знает заранее, поддерживает ли сервер QUIC. Сначала он подключается по TCP (HTTP/2), получает заголовок Alt-Svc: h3=':443' и в последующих запросах переключается на UDP/HTTP/3.
Почему параметр reuseport можно указывать только один раз?
Параметр reuseport создает пул сокетов ядра SO_REUSEPORT на уровне сетевого стека. Он должен быть объявлен ровно один раз для каждой пары ip:port в конфигурации Nginx.