Как включить HTTP/2 на веб-сервере Apache в Ubuntu и Debian
На этой странице
- Предпосылки
- Отключить модуль mod_php
- Включите Apache MPM, совместимый с HTTP/2.
- Включить поддержку HTTP/2 в Apache.
- Ссылки
Протокол передачи гипертекста версии 2 (HTTP/2) — это последняя версия протокола HTTP, опубликованная в качестве стандарта IETF в RFC 7540 в 2015 году. Основное внимание в протоколе уделяется производительности; в частности, воспринимаемая конечным пользователем задержка, использование сети и ресурсов сервера. Одна из основных целей состоит в том, чтобы разрешить использование одного подключения браузеров к веб-сайту. Протокол имеет обратную совместимость, поэтому методы HTTP, коды состояния и семантика такие же, как и в предыдущих версиях протокола. Apache поддерживает HTTP/2, начиная с версии 2.4.17. В этом руководстве я предполагаю, что у вас уже есть работающая конфигурация TLS, и что у вас установлена необходимая версия Apache в выбранном вами дистрибутиве Linux, и что вы знаете, как использовать Lets Encrypt, или знаете, как создать самоподписанный сертификат.
Это руководство было протестировано на Debian 11, Debian 10, Debian 9, Ubuntu 22.04 LTS, Ubuntu 20.04 LTS и Ubuntu 18.04 LTS.
Предпосылки
Чтобы включить HTTP/2 в Apache, вам необходимо выполнить следующие требования:
- Во-первых, вам нужно включить HTTPS на вашем сервере. Все основные браузеры позволяют использовать HTTP/2 только через HTTPS. Кроме того, требуется версия протокола TLS >= 1.2 с современными наборами шифров.
- Затем убедитесь, что вы используете Apache 2.4.17 или выше, так как HTTP/2 поддерживается начиная с этой версии и выше.
- Кроме того, убедитесь, что ваш клиент/браузер действительно поддерживает HTTP/2.
Отключить модуль mod_php
Прежде чем мы сможем переключить модуль Apache MPM на следующем шаге на mpm_event, нам придется отключить старый режим mod_php и заменить его более современным режимом PHP-FPM. Команды различаются для каждой версии операционной системы, используйте те, которые соответствуют вашей установленной системе.
Убунту 22.04 ЛТС
sudo apt-get install php8.1-fpm
sudo a2dismod php8.1
sudo a2enconf php8.1-fpm
sudo a2enmod proxy_fcgi
Дебиан 11
sudo apt-get install php7.4-fpm
sudo a2dismod php7.4
sudo a2enconf php7.4-fpm
sudo a2enmod proxy_fcgi
Убунту 20.04 ЛТС
sudo apt-get install php7.4-fpm
sudo a2dismod php7.4
sudo a2enconf php7.4-fpm
sudo a2enmod proxy_fcgi
Дебиан 10
sudo apt-get install php7.3-fpm
sudo a2dismod php7.3
sudo a2enconf php7.3-fpm
sudo a2enmod proxy_fcgi
Убунту 18.04 ЛТС
sudo apt-get install php7.2-fpm
sudo a2dismod php7.2
sudo a2enconf php7.2-fpm
sudo a2enmod proxy_fcgi
Дебиан 9
sudo apt-get install php7.0-fpm
sudo a2dismod php7.0
sudo a2enconf php7.0-fpm
sudo a2enmod proxy_fcgi
Включите Apache MPM, совместимый с HTTP/2.
По умолчанию Apache будет использовать prefork MPM. Этот MPM не совместим с HTTP/2, поэтому нам придется заменить его более современным модулем mpm_event.
Во-первых, отключаем модуль mpm_prefork:
sudo a2dismod mpm_prefork
Затем мы включаем модуль mpm_event:
sudo a2enmod mpm_event
Включить поддержку HTTP/2 в Apache
Чтобы HTTP/2 работал на Apache, вам необходимо включить и загрузить модули SSL и HTTP/2. Для этого вы можете запустить в своем терминале следующее:
sudo a2enmod ssl
а потом
sudo a2enmod http2
Чтобы активировать эти новые модули, вам нужно запустить:
sudo systemctl restart apache2
После включения и загрузки необходимых модулей Apache перейдите в каталог конфигурации Apache и отредактируйте конфигурацию Apache.
Чтобы включить HTTP/2 на веб-сервере Apache, добавьте один из следующих элементов в глобальную конфигурацию Apache или внутри определенного виртуального хоста.
Protocols h2 http/1.1
Вот минимальная конфигурация виртуального сервера, которую можно использовать для включения HTTP/2 на каком-либо виртуальном хосте:
<VirtualHost *:443>
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
</VirtualHost>
Чтобы проверить, поддерживает ли ваш сервер HTTP/2, вы можете использовать инструменты разработки браузера. Ниже приведены скриншоты из браузеров Google Chrome и Apple Safari, на которых показан HTTP/2 в действии в домене https://example.com.
Хром
Сафари
Ссылки
- RFC 7540
- HTTP/2