Назад к блогу

Как включить HTTP/2 (и HTTP/3): Nginx, Apache, CDN

2025-08-139 мин чтения

Хотите более быстрой загрузки? Включите HTTP/2 и, если возможно, HTTP/3. Это руководство покажет, как включить оба протокола на Nginx, Apache и популярных CDN, как проверить их работу и быстрые исправления, если они не работают.

Зачем нужен HTTP/2 (и HTTP/3)?

HTTP/1.1 открывает несколько соединений и повторяет заголовки. HTTP/2 мультиплексирует запросы по одному соединению и сжимает заголовки. HTTP/3 добавляет QUIC поверх UDP для предотвращения блокировки на транспортном уровне. Результат: более быстрая загрузка, особенно на мобильных устройствах и при высокой задержке.

Быстрые проверки: включены ли они?

  • DevTools: вкладка Network > добавьте столбец "Protocol". Ищите h2 или h3.
  • CLI: curl -I --http2 https://example.com
  • HTTP/3: curl -I --http3 https://example.com (свежая версия curl)
  • Waterfall: Множество файлов должны начинаться одновременно по одному соединению.

Nginx: включение HTTP/2 (и HTTP/3)

server {
   # HTTP/2
   listen 443 ssl http2;
   listen [::]:443 ssl http2;

   # Раскомментируйте, если ваша сборка поддерживает QUIC
   # listen 443 quic reuseport;
   # add_header Alt-Svc 'h3=":443"; ma=86400' always;

   server_name example.com;

   ssl_protocols TLSv1.2 TLSv1.3;
   ssl_prefer_server_ciphers off;
   ssl_session_cache shared:SSL:10m;
   ssl_session_timeout 1d;

   add_header Strict-Transport-Security "max-age=31536000" always;
   # ваша конфигурация SSL-сертификата здесь
}

Требования: модуль HTTP/2 скомпилирован, библиотека TLS с поддержкой ALPN. Большинство современных пакетов включают оба.

Apache: включение HTTP/2

# Загрузка модуля
LoadModule http2_module modules/mod_http2.so

# Включение глобально или в vhost
Protocols h2 http/1.1

# Опционально: ограничить только современным TLS
H2ModernTLSOnly on

Поддержка HTTP/3 в Apache экспериментальна. Для продакшена используйте HTTP/2.

CDN: включение HTTP/2/3 (Cloudflare, CloudFront, Akamai, Fastly)

Большинство CDN поддерживают HTTP/2 и HTTP/3. Включите их для HTTPS-трафика. Откройте UDP/443, если вы управляете собственным периметром и хотите использовать HTTP/3. Если UDP заблокирован, клиенты переключатся на HTTP/2. Протокол CDN к источнику отделен; используйте его, если это легко, но влияние на пользователя исходит от периметра.

Cloudflare

Dashboard > Speed > Optimization > HTTP/2 и HTTP/3 (включено по умолчанию)

AWS CloudFront

Настройки дистрибутива > Supported HTTP Versions > HTTP/2 и HTTP/3

Fastly

Конфигурация сервиса > Settings > HTTP/2 и HTTP/3 support

Проверка + поведение при отказе

Браузеры автоматически договариваются во время TLS-хендшейка с использованием ALPN. Если HTTP/3 не удается (UDP заблокирован), они переключаются на HTTP/2. Если HTTP/2 не удается (старый сервер), они используют HTTP/1.1. Ручное вмешательство не требуется.

Проверьте свою настройку:

  • Современные браузеры показывают h2/h3 в столбце Protocol в DevTools
  • Диаграммы Waterfall показывают параллельные загрузки по одному соединению
  • H3 часто помогает мобильным/нестабильным соединениям больше, чем настольным

Устранение неполадок

HTTP/2 не работает?

  • Проверьте, включен ли модуль HTTP/2 в сборку вашего сервера
  • Убедитесь, что библиотека TLS поддерживает ALPN (OpenSSL 1.0.2+)
  • Убедитесь, что вы тестируете через HTTPS (браузеры требуют этого)
  • Проверьте, не понижает ли прокси/балансировщик нагрузки до HTTP/1.1

HTTP/3 не работает?

  • Убедитесь, что порт UDP 443 открыт
  • Проверьте, поддерживает ли ваша сборка QUIC
  • Подтвердите, что отправляется заголовок Alt-Svc
  • Тестируйте из разных сетей (некоторые блокируют UDP)

Часто задаваемые вопросы

Нужен ли HTTPS для HTTP/2?

Да. Браузеры используют HTTP/2 только через TLS.

Обязателен ли HTTP/3?

Нет, но включайте его, когда можете. Оставляйте HTTP/2 в качестве резервного варианта.

Как проверить, активен ли HTTP/2/3?

Используйте столбец Protocol в DevTools или запустите curl с --http2 или --http3.

Почему включение HTTP/2 ничего не изменило?

Медленная работа приложения и потери в сети все еще имеют значение. Кэшируйте и профилируйте свое приложение; используйте HTTP/3 для нестабильных соединений.