Настройка NGINX для HTTP/2 по шагам
HTTP/2 работает в браузерах только по HTTPS — популярные браузеры не используют его без шифрования. Разберём настройку по шагам: от установки NGINX до проверки протокола.
Инструкция подойдёт для Ubuntu/Debian (замена yum на apt) и RPM-систем.
Шаг 1. Установка или обновление NGINX
HTTP/2 поддерживается начиная с NGINX 1.9.5 (модуль ngx_http_v2_module).
Обновление:
nginx -v
apt update && apt install --only-upgrade nginx # DEB
dnf update nginx # RPM
Установка из официального репозитория (RPM):
vi /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
yum update
yum install nginx
В Ubuntu/Debian современный NGINX (1.25+) из репозитория уже собран с HTTP/2.
Шаг 2. Проверка OpenSSL
Смотрим, с какой OpenSSL собран NGINX:
nginx -V
built with OpenSSL 3.x ...
Версия OpenSSL должна быть не ниже 1.0.2 — для современного TLS обычно уже 3.x.
Если версия старая, пересобираем NGINX:
wget http://nginx.org/download/nginx-1.31.6.tar.gz
tar -xvf nginx-*.tar.gz
cd nginx-*
apt install build-essential libpcre3-dev zlib1g-dev libssl-dev libxml2-dev libxslt1-dev libgd-dev libgeoip-dev libperl-dev # DEB
Копируем аргументы configure из вывода nginx -V и выполняем конфигурирование, убедившись в наличии --with-http_v2_module:
./configure <аргументы из nginx -V> --with-http_v2_module
make
make install
Начиная с NGINX 1.25.1 директива listen 443 ssl http2 устарела — используется отдельная http2 on;.
Шаг 3. Создание сертификата
HTTP/2 в браузере требует HTTPS. Для теста — самоподписанный сертификат; для прода — Let’s Encrypt или коммерческий CA.
mkdir /etc/nginx/ssl
openssl req -new -x509 -days 1461 -nodes -out /etc/nginx/ssl/cert.pem -keyout /etc/nginx/ssl/cert.key
-subj "/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=test.dmosk.local/CN=test"
Сертификат на 4 года (1461 день) для test.dmosk.local/test.
Шаг 4. Настройка NGINX
vi /etc/nginx/conf.d/test.dmosk.local.conf
server {
listen 80;
server_name test-http2.dmosk.local;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
http2 on;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/cert.key;
location / {
root /usr/share/nginx/html;
}
}
Первые 4 строки перенаправляют HTTP на HTTPS; /etc/nginx/ssl/ — каталог сертификатов; /usr/share/nginx/html — корень сайта.
Современный синтаксис: http2 on; отдельной директивой вместо устаревшего listen 443 ssl http2;.
nginx -t && nginx -s reload
Шаг 5. Проверка HTTP/2
- Внешний ресурс: онлайн-сервис geekflare.com/tools/http2-test.
- Локально: расширение браузера (например, для Chrome — HTTP/2 indicator) или:
curl -I --http2 -k https://test-http2.dmosk.local
HTTP/2 200
Строка HTTP/2 200 подтверждает работу протокола.
Тонкости и подводные камни
- HTTP/2 только по HTTPS — браузеры не используют h2c (незашифрованный HTTP/2).
http2 on;— в NGINX 1.25.1+ параметрhttp2в директивеlistenустарел.--with-http_v2_module— при ручной сборке проверьте наличие этого модуля.- OpenSSL — старая версия не поддерживает современные шифры и ALPN (нужен для согласования HTTP/2).
nginx -tперед reload — проверяйте синтаксис конфигурации.- Сертификат — самоподписанный вызовет предупреждение браузера, но HTTP/2 при этом работает.
- HTTP/3 — современный NGINX также поддерживает QUIC (
listen 443 quic reuseport;+http3 on;), но это отдельная тема.
Шпаргалка
nginx -v # >= 1.9.5
nginx -V # проверить OpenSSL и --with-http_v2_module
mkdir -p /etc/nginx/ssl
openssl req -new -x509 -days 1461 -nodes -out /etc/nginx/ssl/cert.pem -keyout /etc/nginx/ssl/cert.key -subj "/CN=test.local"
# server { listen 443 ssl; http2 on; ssl_certificate ...; }
nginx -t && nginx -s reload
curl -I --http2 -k https://test.local # HTTP/2 200
Проверено на: Ubuntu 22.04/24.04, Rocky Linux 9 + NGINX 1.31.6.
Дата: Сентябрь 2026.