Включение HTTP/2 в Nginx

HTTP/2 — это версия протокола Hypertext Transfer Protocol, стандартизованная в RFC 7540 в 2015 году. Основная цель протокола — повысить производительность: снизить задержки, оптимизировать использование сетевых и серверных ресурсов и позволить браузеру эффективно работать по одной TCP-сессии. Методология и семантика HTTP (методы, коды ответа) совместимы с предыдущими версиями.
Nginx поддерживает HTTP/2 начиная с версии 1.9.5. В этом руководстве предполагается, что у вас уже настроен TLS (сертификат от Let’s Encrypt или самоподписанный сертификат) и вы умеете управлять конфигурацией Nginx на вашей Linux-системе.
Требования
Чтобы включить HTTP/2 в Nginx, выполните следующие условия:
- Nginx версии 1.9.5 или выше. Проверить версию:
nginx -v- OpenSSL версии 1.0.2 или выше. Проверить версию OpenSSL:
openssl version- SSL/TLS-сертификат от Let’s Encrypt либо самоподписанный.
- Включённый протокол TLS 1.2 или выше — реализации HTTP/2 поверх TLS требуют TLS 1.2+.
Важно: некоторые дистрибутивы и сборки Nginx могут поставляться с устаревшим OpenSSL или без включённой поддержки ALPN — в таких случаях обновление OpenSSL или пересборка Nginx может понадобиться.
Включение HTTP/2
Чтобы включить HTTP/2, добавьте параметр http2 к директиве listen в конфигурации виртуального хоста. После правки перезагрузите Nginx.
listen 443 ssl http2;Перезагрузите конфигурацию:
sudo systemctl reload nginx.serviceНиже минимальная конфигурация виртуального сервера, которую можно использовать для включения HTTP/2:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com;
root /path/to/public;
ssl_certificate /path/to/certificate.crt;
ssl_certificate_key /path/to/private.key;
ssl_protocols TLSv1.2;
}
Примечание: сохраните корректные пути к файлам сертификатов и закройте доступ к приватному ключу для неавторизованных пользователей.
Проверка поддержки HTTP/2
Способы проверки:
- В инструментах разработчика браузера (Chrome/Firefox) на вкладке Network обычно отображается используемый протокол (h2 для HTTP/2).

- Используйте curl (если поддерживает HTTP/2):
curl -I --http2 https://example.com- Логирование в Nginx: встроенная переменная $http2 показывает negotiated protocol. Пример формата лога, включающего $http2:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http2"';
access_log /var/log/nginx/access.log main;При успешном согласовании TLS и HTTP/2 в лог будет записано “h2”. Для HTTP/2 без TLS (h2c) — будет “h2c”.
Когда HTTP/2 не подходит
- Старые клиенты или промежуточные прокси, которые не поддерживают HTTP/2, могут разрывать соединение или возвращать ошибки.
- Если на инфраструктуре стоит TLS-терминирующий балансировщик, который не поддерживает ALPN/HTTP/2, обновите балансировщик или включите поддержку HTTP/2 на нём.
- Требования к безопасности: если вы обязаны использовать только TLS 1.3 в организации, убедитесь, что стек поддерживает её; при этом HTTP/2 работает и с TLS 1.3.
- В случае, когда требуется применение QUIC/HTTP/3 (например, при высоких потерях пакетов), HTTP/3 может дать лучшие результаты.
Альтернативные подходы
- Оставить HTTP/1.1 при несовместимости стеков или для упрощения отладки.
- Перейти на HTTP/3 (QUIC) для сетей с высокой потерей пакетов и высокой задержкой.
- Использовать прокси-сервер или CDN, который терминейт TLS и предоставляет HTTP/2/3 поверх своей инфраструктуры.
Мини-методология: быстрый чек-лист
- Проверить версии Nginx и OpenSSL.
- Убедиться в наличии сертификата TLS.
- Добавить http2 к директиве listen в конфиге виртуального хоста.
- Перезагрузить Nginx.
- Проверить работу через браузер, curl и лог-файлы.
- Наблюдать метрики производительности и ошибки после включения.
Ролевые чеклисты
DevOps:
- Обновить Nginx/OpenSSL при необходимости.
- Включить http2 в конфиге и перезапустить сервис.
- Настроить логирование $http2.
Разработчик:
- Тестировать поведение приложения при одновременных запросах (вебсокеты, long-polling).
- Проверить работу при отключенном HTTP/2 для совместимости.
QA:
- Проверить корректность заголовков, статусов и контента через HTTP/2.
- Провести нагрузочное тестирование и сравнить метрики с HTTP/1.1.
Безопасность:
- Убедиться в использовании TLS 1.2+ и сильных шифров.
- Проверить доступ к приватным ключам и обновление сертификатов.
Факт-бокс: ключевые числа
- RFC: 7540 (2015)
- Минимальная версия Nginx с поддержкой HTTP/2: 1.9.5
- Минимальная версия OpenSSL для ALPN: 1.0.2
- Требуемая версия TLS для HTTP/2 поверх TLS: TLS 1.2+
Критерии приёмки
- Сервер отвечает по HTTPS и в логах/инструментах браузера видно протокол h2.
- Нет регрессий в функциональности API и статического контента.
- Метрики задержек и пропускной способности не ухудшились после включения.
Полезные советы и примечания
Важно: ALPN (Application-Layer Protocol Negotiation) — ключевая часть согласования HTTP/2 поверх TLS. Если используемый OpenSSL или сборка Nginx не поддерживает ALPN, браузеры не перейдут на HTTP/2.
Примечание: включение http2 в директиве listen не влияет на поведение HTTP/1.1 клиентов — они продолжат работать.
Итог
Включение HTTP/2 в Nginx — в большинстве случаев простая операция: убедитесь в версиях ПО и TLS, добавьте http2 к listen, перезагрузите сервис и проверьте через браузер или curl. Для сложных инфраструктур учитывайте балансировщики, прокси и поддержку ALPN.
Ссылки
- RFC 7540
- HTTP/2
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента