HTTP/2 (TCP/443) — ускоряет мультиплексирование на TLS.
HTTP/3 (QUIC) (UDP/443) — быстрее при потере пакетов и на мобильных сетях.
Минимум: TLS 1.3, валидный сертификат (например, Let’s Encrypt), открыты 443/TCP и 443/UDP.
Важно: поддержка HTTP/3 в NGINX — модуль http_v3. Убедитесь, что он собран:
nginx -V 2>&1 | grep -o http_v3_module || echo "http_v3_module not found"
Если строки нет — используйте вариант установки с этим модулем (ниже есть два пути).
1) Debian 12/13: обновить NGINX до свежего и включить HTTP/2/3
1.1. Обновление NGINX из свежего репозитория
sudo apt update && sudo apt -y full-upgradesudo apt -y install curl gnupg2 ca-certificates lsb-release
# (Опционально) подключаем репозиторий nginx.org (часто новее дистрибутивного)curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo gpg --dearmor -o /usr/share/keyrings/nginx.gpgecho "deb [signed-by=/usr/share/keyrings/nginx.gpg] http://nginx.org/packages/$(. /etc/os-release; echo $ID) $(lsb_release -sc) nginx" \| sudo tee /etc/apt/sources.list.d/nginx.list >/dev/null
sudo apt updatesudo apt -y install nginxnginx -vnginx -V 2>&1 | grep -E 'http_v2|http_v3' || true
Если http_v3_module не обнаружен, переходите к «Вариант C: сборка с QUIC» (ниже).
1.2. Фаервол UFW для TCP/UDP 443
sudo apt -y install ufwsudo ufw allow 80/tcpsudo ufw allow 443/tcpsudo ufw allow 443/udpsudo ufw --force enablesudo ufw status
1.3. TLS-сертификат (пример с certbot standalone)
sudo apt -y install certbotsudo systemctl stop nginxsudo certbot certonly --standalone -d example.com -m [email protected] --agree-tos -nsudo systemctl start nginx
1.4. NGINX конфиг с HTTP/2 + HTTP/3 (QUIC)
Файл сайта: /etc/nginx/conf.d/site.conf
server {# HTTP/3 (QUIC) — UDP/443listen 443 quic reuseport;# HTTP/2 — TCP/443listen 443 ssl http2;
server_name example.com;
# Ваши актуальные пути к сертификатамssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# TLS 1.2/1.3 (HTTP/3 работает только на TLS 1.3)ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256;ssl_prefer_server_ciphers off;
# Рекламируем HTTP/3 клиентамadd_header Alt-Svc 'h3=":443"; ma=86400' always;add_header QUIC-Status $quic always;
# Базовый сайтroot /var/www/html;index index.html index.php;
location / {try_files $uri $uri/ =404;}
# (Опционально) PHP-FPMlocation ~ \.php$ {include fastcgi_params;fastcgi_pass unix:/run/php/php-fpm.sock;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;}}
Проверка и перезапуск:
sudo nginx -t && sudo systemctl reload nginx
2) AlmaLinux 8/9: обновить NGINX и включить HTTP/2/3
2.1. Удалить старый пакет и поставить из свежего репозитория
sudo dnf -y remove nginx || true
# Репозиторий nginx.orgsudo tee /etc/yum.repos.d/nginx.repo >/dev/null <<'REPO'[nginx-stable]name=nginx stable repobaseurl=http://nginx.org/packages/rhel/$releasever/$basearch/gpgcheck=1enabled=1gpgkey=https://nginx.org/keys/nginx_signing.key
[nginx-mainline]name=nginx mainline repobaseurl=http://nginx.org/packages/mainline/rhel/$releasever/$basearch/gpgcheck=1enabled=1gpgkey=https://nginx.org/keys/nginx_signing.keyREPO
# Ставим mainline или stable (на ваш выбор)sudo dnf -y install nginxnginx -vnginx -V 2>&1 | grep -E 'http_v2|http_v3' || true
Если http_v3_module не найден, используйте «Вариант 3: сборка с QUIC».
2.2. firewalld: открыть TCP/UDP 443
sudo dnf -y install firewalldsudo systemctl enable --now firewalldsudo firewall-cmd --permanent --add-service=httpsudo firewall-cmd --permanent --add-service=https # TCP/443sudo firewall-cmd --permanent --add-port=443/udp # UDP/443 для QUICsudo firewall-cmd --reload
2.3. Сертификат (standalone)
sudo dnf -y install certbotsudo systemctl stop nginxsudo certbot certonly --standalone -d example.com -m [email protected] --agree-tos -nsudo systemctl start nginx
2.4. Конфиг сервера
Файл: /etc/nginx/conf.d/site.conf — используйте тот же блок, что и в секции Debian (1.4).
Проверка и перезапуск:
sudo nginx -t && sudo systemctl reload nginx
3) Вариант C (универсальный): сборка NGINX с HTTP/3 (QUIC)
Если пакет из репозитория не включает http_v3_module, собираем NGINX с поддержкой QUIC (на базе OpenSSL с QUIC-патчами, либо аналогичной библиотеки).
3.1. Зависимости (Debian/Alma)
# Debiansudo apt -y install build-essential git cmake zlib1g-dev libpcre3-dev
# AlmaLinuxsudo dnf -y groupinstall "Development Tools"sudo dnf -y install git zlib-devel pcre2-devel cmake
3.2. Исходники (пример для mainline; версии подставьте актуальные)
cd /usr/local/src# OpenSSL c поддержкой QUIC (ветка/релиз с QUIC)git clone https://github.com/quictls/openssl.gitcd openssl && git checkout openssl-3.1.5+quic # пример тега; возьмите актуальныйcd ..
# NGINX mainlinecurl -LO https://nginx.org/download/nginx-1.25.5.tar.gztar xzf nginx-1.25.5.tar.gz
3.3. Сборка
cd nginx-1.25.5./configure \--prefix=/etc/nginx \--sbin-path=/usr/sbin/nginx \--conf-path=/etc/nginx/nginx.conf \--pid-path=/var/run/nginx.pid \--with-http_ssl_module \--with-http_v2_module \--with-http_v3_module \--with-stream=dynamic \--with-cc-opt="-I/usr/local/src/openssl/include" \--with-ld-opt="-Wl,-rpath=/usr/local/src/openssl" \--with-openssl=/usr/local/src/openssl
make -j$(nproc)sudo make installnginx -V 2>&1 | grep -E 'http_v3|http_v2'
Создайте systemd-юнит /etc/systemd/system/nginx.service (если его нет):
[Unit]Description=nginx - high performance web serverAfter=network-online.targetWants=network-online.target
[Service]Type=forkingPIDFile=/var/run/nginx.pidExecStartPre=/usr/sbin/nginx -tExecStart=/usr/sbin/nginxExecReload=/usr/sbin/nginx -s reloadExecStop=/usr/sbin/nginx -s quitRestart=on-failure
[Install]WantedBy=multi-user.target
sudo systemctl daemon-reloadsudo systemctl enable --now nginx
Дальше — тот же конфиг сервера с listen 443 quic reuseport; и listen 443 ssl http2;, сертификаты, фаервол и тесты.
4) Тестирование HTTP/2 и HTTP/3
4.1. Проверить, что NGINX слушает UDP 443
sudo ss -lunp | grep ':443' # должны видеть nginx на UDP/443sudo ss -ltnp | grep ':443' # и на TCP/443
4.2. Проверить HTTP/2
curl -I --http2 https://example.com
4.3. Проверить HTTP/3 (QUIC)
curl -I --http3 https://example.com
# В заголовках увидите HTTP/3; также поможет Alt-Svc и QUIC-Status
5) nginx настройка
5.1. Строгий TLS
ssl_session_timeout 1d;ssl_session_cache shared:SSL:50m;ssl_session_tickets off;ssl_stapling on;ssl_stapling_verify on;
5.2. Безопасные заголовки
add_header X-Content-Type-Options nosniff always;add_header X-Frame-Options DENY always;add_header Referrer-Policy same-origin always;
5.3. Производительность QUIC
# Включите reuseport в listen (уже сделали)
# Для высоконагруженных: поднимайте worker_processes auto; и worker_connections
Подключим HTTP/2/3 (QUIC) на Debian/AlmaLinux «под ключ»: обновим NGINX, соберём с http_v3_module при необходимости, выпустим/подключим сертификаты, настроим фаервол (TCP/UDP 443), проверим производительность и заведём мониторинг. Если нужно — сделаем канареечный режим (часть трафика по HTTP/3) и дадим чек-лист по обратной совместимости.