HTTP/2 — современный протокол, который пришел на смену HTTP/1.1. Вот что он дает:
- Мультиплексирование — параллельная передача нескольких запросов по одному соединению
- Приоритизация — важные ресурсы загружаются первыми
- Сжатие заголовков — уменьшение объема передаваемых данных
- Server Push — отправка ресурсов до того, как клиент их запросит
Для поддержки HTTP/2 нужен Nginx версии 1.9.5 или выше. Проверить текущую версию можно, набрав в консоли:
nginx -v
На момент написание этого текста текущая стабильная версия была 1.28.
HTTP/2 требует обязательного использования HTTPS. У вас должен быть SSL-сертификат:
- От Let's Encrypt (бесплатный)
- Коммерческий сертификат
- Самоподписанный (только для тестов)
Наиболее простой способ получение SSL-сертификата - использование сервиса Let's Encrypt. Для этого, устанавливаем Certbot и получаем сертификат:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.tld -d www.your-domain.tld
Настройка Nginx для HTTP/2
Открывем конфигурационный файл сайта:
sudo nano /etc/nginx/sites-available/your_site.conf
Редактируем блок server для порта 443. Неробходимо добавить директиву http2, имеющую значние on.
БЫЛО:
server {
listen 443 ssl;
listen [::]:443 ssl; # для IPv6
server_name your-domain.tld;
ssl_certificate /etc/ssl/certs/ваш-сертификат.crt;
ssl_certificate_key /etc/ssl/private/ваш-ключ.key;
# ... остальные настройки
}
СТАЛО:
server {
# Добавляем директиву http2
http2 on;
listen 443 ssl;
listen [::]:443 ssl http2; # для IPv6
server_name ваш-домен.ru;
# ... остальные настройки сайта
}
Директива http2 была добавлена в Nginx, начиная с версии 1.25.1. Для более старых версий, необходимо использовать парметр 'http2' в директиве listen. В настоящее время нижеследующий вариант включение HTTP/2 в конфигурационных файлах Nginx считается устаревшим.
БЫЛО:
server {
listen 443 ssl;
listen [::]:443 ssl; # для IPv6
server_name your-domain.tld;
ssl_certificate /etc/ssl/certs/ваш-сертификат.crt;
ssl_certificate_key /etc/ssl/private/ваш-ключ.key;
# ... остальные настройки
}
СТАЛО:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2; # для IPv6
server_name your-domain.tld;
ssl_certificate /etc/ssl/certs/ваш-сертификат.crt;
ssl_certificate_key /etc/ssl/private/ваш-ключ.key;
# ... остальные настройки
}
При тестировании конфигурации (запуском nginx -t в консоли) на момент написания данного текста, использование данного варианта настройки HTTP/2 в Nginx выдавало следующе предупреждение:
[warn] 628938#628938: the "listen ... http2" directive is deprecated, use the "http2" directive instead in /etc/ng
inx/sites-enabled/your_server.conf:xy
Проверяем, есть ли редирект с HTTP на HTTPS (обязательно, обычно автоматически добавляется Certbot-ом при получении сертификата)
server {
listen 80;
listen [::]:80;
server_name ваш-домен.ru www.ваш-домен.ru;
return 301 https://$server_name$request_uri;
}
Проверяем синтаксис конфигурации
sudo nginx -t
# Если все ок, перезагружаем Nginx
sudo systemctl reload nginx
# или
sudo service nginx reload
Проверка работы HTTP/2
Способ 1: Через браузер
- Откройте Developer Tools (F12)
- Перейдите на вкладку "Сеть"
- Обновите страницу выберите любой запрос.
- В строке "Версия" должно быть - HTTP/2.

Способ 2: Через командную строку
# Используя curl
curl -I --http2 https://your-domain.tld
# Или с подробным выводом
curl -v --http2 https://your-domain.tld 2>&1 | grep -i "HTTP/"
# Альтернативный способ
nginx -V 2>&1 | grep -o http_v2_module
# Если видим http_v2_module — поддержка есть
-домен.ru/chain.pem;
Итог
Включение HTTP/2 в Nginx — простая процедура, которая дает:
- Ускорение загрузки на 15-50%
- Уменьшение нагрузки на сервер
- Лучший пользовательский опыт
Основные шаги:
- Убедиться, что Nginx ≥ 1.9.5
- Настроить SSL
- Добавить
http2в директивуlisten - Проверить и перезагрузить конфигурацию
Важно: Если вы используете Cloudflare или другой CDN, убедитесь, что он поддерживает HTTP/2, так как соединение между пользователем и CDN также должно использовать этот протокол для максимальной эффективности.