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-upgrade
sudo 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.gpg
echo "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 update
sudo apt -y install nginx
nginx -v
nginx -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 ufw
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 443/udp
sudo ufw --force enable
sudo ufw status
1.3. TLS-сертификат (пример с certbot standalone)
sudo apt -y install certbot
sudo systemctl stop nginx
sudo certbot certonly --standalone -d example.com -m [email protected] --agree-tos -n
sudo systemctl start nginx
1.4. NGINX конфиг с HTTP/2 + HTTP/3 (QUIC)
Файл сайта: /etc/nginx/conf.d/site.conf
server {
# HTTP/3 (QUIC) — UDP/443
listen 443 quic reuseport;
# HTTP/2 — TCP/443
listen 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 repo
baseurl=http://nginx.org/packages/rhel/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/rhel/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
REPO
# Ставим mainline или stable (на ваш выбор)sudo dnf -y install nginx
nginx -v
nginx -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 firewalld
sudo systemctl enable --now firewalld
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https # TCP/443
sudo firewall-cmd --permanent --add-port=443/udp # UDP/443 для QUIC
sudo firewall-cmd --reload
2.3. Сертификат (standalone)
sudo dnf -y install certbot
sudo systemctl stop nginx
sudo certbot certonly --standalone -d example.com -m [email protected] --agree-tos -n
sudo 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.git
cd openssl && git checkout openssl-3.1.5+quic # пример тега; возьмите актуальный
cd ..
# NGINX mainline
curl -LO https://nginx.org/download/nginx-1.25.5.tar.gz
tar 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 install
nginx -V 2>&1 | grep -E 'http_v3|http_v2'
Создайте systemd-юнит /etc/systemd/system/nginx.service (если его нет):
[Unit]
Description=nginx - high performance web server
After=network-online.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/usr/sbin/nginx -s reload
ExecStop=/usr/sbin/nginx -s quit
Restart=on-failure
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo 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/443
sudo 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) и дадим чек-лист по обратной совместимости.