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

HTTP/2 — это версия протокола Hypertext Transfer Protocol, стандартизированная в RFC 7540 (2015). Основная цель протокола — снизить задержки, уменьшить нагрузку на сеть и серверы и улучшить восприятие скорости пользователем. HTTP/2 поддерживает мультиплексирование запросов по одному TLS-соединению, при этом методы, коды состояния и семантика HTTP остаются прежними.
В этой инструкции предполагается, что у вас уже есть работающее HTTPS (сертификат от Let’s Encrypt или самоподписанный) и установлена версия Apache, совместимая с HTTP/2 (≥ 2.4.17).

Эта инструкция протестирована на 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_fcgiDebian 11
sudo apt-get install php7.4-fpm
sudo a2dismod php7.4
sudo a2enconf php7.4-fpm
sudo a2enmod proxy_fcgiUbuntu 20.04 LTS
sudo apt-get install php7.4-fpm
sudo a2dismod php7.4
sudo a2enconf php7.4-fpm
sudo a2enmod proxy_fcgiDebian 10
sudo apt-get install php7.3-fpm
sudo a2dismod php7.3
sudo a2enconf php7.3-fpm
sudo a2enmod proxy_fcgiUbuntu 18.04 LTS
sudo apt-get install php7.2-fpm
sudo a2dismod php7.2
sudo a2enconf php7.2-fpm
sudo a2enmod proxy_fcgiDebian 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
- Через браузер: откройте DevTools → Network → выберите столбец Protocol (в Chrome) или в инспекторе ресурсов Safari. Ниже примеры скриншотов.


- Через 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.
Стратегия развертывания (мини-методология)
- Подготовьте тестовую среду с копией конфигурации и сертификатом.
- Внедрите HTTP/2 в стейджинг, выполните авто- и ручное тестирование (проверка производительности, логов и TLS).
- Канареечный релиз на ограниченную группу серверов/публичных ресурсов.
- Мониторинг: SLI — время ответа для ключевых страниц, ошибки 5xx; SLO — стабильность + отсутствие регрессий.
- Полный релиз после успешной валидации.
Критерии приёмки
- На стабильной сборке сервера: все запросы к сайту обслуживаются через 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.
Быстрый план отката (если проблемы в проде)
- Вернуть директиву Protocols к прежнему состоянию (удалить h2).
- Перезапустить Apache и мониторить логи.
- Откатить изменения 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 улучшает сетевую подсистему, но не заменяет правильную оптимизацию приложений и кэширования.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента