Гид по технологиям

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

• 5 min read • DevOps • Обновлено 17 Nov 2025
HTTP/2 в Apache: настройка и проверка
HTTP/2 в Apache: настройка и проверка

Иллюстрация: схема установки и оптимизации сервера для HTTP/2

HTTP/2 — это версия протокола Hypertext Transfer Protocol, стандартизированная в RFC 7540 (2015). Основная цель протокола — снизить задержки, уменьшить нагрузку на сеть и серверы и улучшить восприятие скорости пользователем. HTTP/2 поддерживает мультиплексирование запросов по одному TLS-соединению, при этом методы, коды состояния и семантика HTTP остаются прежними.

В этой инструкции предполагается, что у вас уже есть работающее HTTPS (сертификат от Let’s Encrypt или самоподписанный) и установлена версия Apache, совместимая с HTTP/2 (≥ 2.4.17).

Диаграмма: принцип работы HTTP/2 с мультиплексированием

Эта инструкция протестирована на Debian 9–11 и Ubuntu 18.04–22.04 LTS.

Что нужно знать до начала

  • HTTP/2 в современных браузерах обычно работает только по HTTPS. TLS версии 1.2 или выше с современными шифрами обязателен.
  • Apache должен быть версии 2.4.17 или выше.
  • Клиент (браузер) должен поддерживать HTTP/2.

Важно: перевод сайта на HTTP/2 не меняет логику приложения. Это сетевой и серверный уровень оптимизации.

Подготовка: отключение mod_php и переход на PHP-FPM

MPM mpm_event совместим с HTTP/2. Старый режим mod_php (prefork) конфликтует с ним. Перед переключением MPM отключите mod_php и настройте PHP-FPM.

Выберите блок команд для вашей системы и выполните его от root или через sudo.

Ubuntu 22.04 LTS

sudo apt-get install php8.1-fpm
sudo a2dismod php8.1
sudo a2enconf php8.1-fpm
sudo a2enmod proxy_fcgi

Debian 11

sudo apt-get install php7.4-fpm
sudo a2dismod php7.4
sudo a2enconf php7.4-fpm
sudo a2enmod proxy_fcgi

Ubuntu 20.04 LTS

sudo apt-get install php7.4-fpm
sudo a2dismod php7.4
sudo a2enconf php7.4-fpm
sudo a2enmod proxy_fcgi

Debian 10

sudo apt-get install php7.3-fpm
sudo a2dismod php7.3
sudo a2enconf php7.3-fpm
sudo a2enmod proxy_fcgi

Ubuntu 18.04 LTS

sudo apt-get install php7.2-fpm
sudo a2dismod php7.2
sudo a2enconf php7.2-fpm
sudo a2enmod proxy_fcgi

Debian 9

sudo apt-get install php7.0-fpm
sudo a2dismod php7.0
sudo a2enconf php7.0-fpm
sudo a2enmod proxy_fcgi

После установки и включения конфигурации PHP-FPM убедитесь, что сокеты/порты настроены корректно в ваших виртуальных хостах.

Переключение Apache MPM на mpm_event

По умолчанию часто включён mpm_prefork. Его нужно отключить и включить mpm_event:

sudo a2dismod mpm_prefork
sudo a2enmod mpm_event

Перезапустите Apache после изменений.

sudo systemctl restart apache2

Включение модулей SSL и HTTP/2

Активируйте модули SSL и http2:

sudo a2enmod ssl
sudo a2enmod http2
sudo systemctl restart apache2

Конфигурация виртуального хоста для HTTP/2

Добавьте директиву Protocols в глобальную конфигурацию Apache или внутрь виртуального хоста на 443 порту.

Protocols h2 http/1.1

Минимальный пример виртуального хоста:


  ServerName example.com
  ServerAlias www.example.com
  DocumentRoot /var/www/public_html/example.com
  SSLEngine on
  SSLCertificateKeyFile /path/to/private.pem
  SSLCertificateFile /path/to/cert.pem
  SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
  Protocols h2 http/1.1

Обратите внимание: сохраняйте порядок протоколов — h2 должен идти перед http/1.1.

Проверка поддержки HTTP/2

  1. Через браузер: откройте DevTools → Network → выберите столбец Protocol (в Chrome) или в инспекторе ресурсов Safari. Ниже примеры скриншотов.

HTTP/2 в Chrome — колонка с протоколом показывает h2

HTTP/2 в Safari — индикатор протокола h2 для ресурса

  1. Через curl (терминал):
curl -I --http2 https://example.com

Если ответ пришёл и флаги указывают на http/2, значит всё настроено.

Отладка и типичные проблемы

  • Apache не загружает модуль http2: проверьте apachectl -M и логи /var/log/apache2/error.log.
  • HTTP/2 не работает из-за старого TLS: убедитесь, что включён TLS 1.2+ и современные шифры. Отключите SSLv3/TLSv1/TLSv1.1.
  • Конфликт MPM и модулей: мод_php (prefork) несовместим с mpm_event — проверьте a2dismod/a2enmod шаги выше.
  • Если используются обратные прокси или балансировщики, убедитесь, что они поддерживают и проксируют HTTP/2 корректно или терминируют TLS на фронте.

Рекомендации по безопасности TLS

  • Минимум TLS 1.2; предпочтительно TLS 1.3.
  • Используйте современные шифры: ECDHE и AEAD (например, ECDHE-ECDSA-AES128-GCM-SHA256 или соответствующие записи для OpenSSL).
  • Включите HSTS (HTTP Strict Transport Security) осторожно: сначала тестируйте на поддоменах.
  • Регулярно обновляйте OpenSSL и Apache.

Стратегия развертывания (мини-методология)

  1. Подготовьте тестовую среду с копией конфигурации и сертификатом.
  2. Внедрите HTTP/2 в стейджинг, выполните авто- и ручное тестирование (проверка производительности, логов и TLS).
  3. Канареечный релиз на ограниченную группу серверов/публичных ресурсов.
  4. Мониторинг: SLI — время ответа для ключевых страниц, ошибки 5xx; SLO — стабильность + отсутствие регрессий.
  5. Полный релиз после успешной валидации.

Критерии приёмки

  • На стабильной сборке сервера: все запросы к сайту обслуживаются через TLS и доступны по HTTP/2 (curl и браузер подтверждают h2).
  • Нет регрессий по времени отклика и ошибкам 5xx по сравнению с базовой линией до внедрения.
  • Механизмы логирования и мониторинга работают корректно.

Чек-листы по ролям

Администратор сервера:

  • Проверить версию Apache (>=2.4.17).
  • Переключить на mpm_event.
  • Включить ssl и http2 модули.
  • Перезапустить и проверить логи.

Разработчик:

  • Убедиться, что приложение корректно работает за PHP-FPM.
  • Проверить поведение кэширования и заголовков (ETag, Cache-Control).

Специалист по безопасности:

  • Проверить список шифров и политики TLS.
  • Настроить HSTS и тесты для защиты от downgrade-атак.

Когда HTTP/2 поможет и когда нет

Поможет:

  • Большое количество небольших ресурсов (мультиплексирование уменьшит задержки).
  • HTTP/1.1 с множеством TCP-соединений.

Может не помочь (или не дать значимого выигрыша):

  • Уже внедрён HTTP/1.1 с агрессивным HTTP-кешированием и оптимизированными сборками (HTTP/2 не заменяет оптимизацию бандлов и кэшей).
  • Когда критична совместимость с очень старыми клиентами без TLS.

Быстрый план отката (если проблемы в проде)

  1. Вернуть директиву Protocols к прежнему состоянию (удалить h2).
  2. Перезапустить Apache и мониторить логи.
  3. Откатить изменения MPM, если нужно (включить mpm_prefork и мод_php), вернуть PHP назад.

Краткий глоссарий (1 строка на термин)

  • HTTP/2: версия HTTP с мультиплексированием и бинарным форматированием сообщений.
  • MPM: Multi-Processing Module, модель обработки запросов в Apache.
  • PHP-FPM: менеджер процессов PHP для работы через сокеты/фаст-си-джи.

Резюме

Включение HTTP/2 в Apache — это в первую очередь работа с MPM и TLS. Переведите PHP на PHP-FPM, переключитесь на mpm_event, подключите модули ssl и http2 и добавьте директиву Protocols в виртуальный хост. Тестируйте в стейджинге и поэтапно выкатывайте в продакшн, контролируя логи и метрики.

Важно: HTTP/2 улучшает сетевую подсистему, но не заменяет правильную оптимизацию приложений и кэширования.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро