Обновление NGINX и включение HTTP/2/3/QUIC на Debian и AlmaLinux Print

  • debian, almalinux8, almalinux9, nginx, quic, http2
  • 0

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-FPM
location ~ \.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.org
sudo 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)

# Debian
sudo apt -y install build-essential git cmake zlib1g-dev libpcre3-dev

# AlmaLinux
sudo 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) и дадим чек-лист по обратной совместимости.


Was this answer helpful?

Related Articles

Какие есть боты/сервисы, которые стоит добавить в исключения? Практический гайд для защиты сайта и бизнеса В современных условиях кибербезопасности настройка блокировок и фильтров — обязательная мера для... Что делать, если сертификаты Let’s Encrypt не обновляются? Простое решение за 5 минут Сертификаты от Let’s Encrypt стали стандартом для бесплатной автоматической защиты сайтов по... Какие сервисы и решения реально помогают? Топ-10 инструментов Почему взламывают сайты и что самое опасное? Современный сайт на WordPress, Битрикс, Joomla,... Лучшие версии PHP и MySQL сейчас для WordPress: что выбрать для максимальной стабильности и скорости? WordPress — самая популярная CMS в мире, и именно поэтому вопрос о правильной версии PHP и... Где сейчас захостить видео, чтобы его просто вставлять на свой сайт без рекламы? Лучшие альтернативы YouTube В 2025 году все чаще сталкиваемся с ситуацией: YouTube работает с перебоями, вставки грузятся...
« Back

Powered by WHMCompleteSolution


Knowledgebase