Данное руководство научит вас, как активировать протокол HTTP/2 и использовать функцию server push на Apache в системе Ubuntu 20.04. Как вам уже известно, HTTP/2 обеспечивает значительно более высокую скорость по сравнению с протоколом HTTP/1.1. Это связано с тем, что первый протокол позволяет браузеру отправлять несколько запросов к веб-серверу одновременно через одно TCP-соединение (мультиплексирование) и получать ответы в произвольном порядке.
На сегодняшний день средняя скорость интернет-соединения пользователей значительно возросла по сравнению с прошлым, что способствует более быстрой загрузке веб-страниц. Тем не менее, при достижении скорости 5 Мбит/с дальнейшее увеличение пропускной способности практически не сказывается на времени загрузки. Как на 5 Мбит/с, так и на 10 Мбит/с страницы загружаются примерно одинаково быстро. В настоящее время основными факторами, определяющими скорость загрузки, являются задержка и объем передаваемых данных. Это одна из задач, которую решает мультиплексирование в HTTP/2.
Содержание статьи
Предварительные условия
Спецификация HTTP/2 разрешает использование протокола HTTP в текстовом формате, однако на практике все популярные веб-браузеры реализуют HTTP/2 таким образом, что для его работы необходим HTTPS. Поэтому, прежде чем активировать протокол HTTP/2 на вашем сайте, следует сначала включить HTTPS. Рекомендуем ознакомиться с подробным руководством по настройке HTTPS:
- Настройка HTTPS на сервере Apache с использованием Let’s Encrypt на Ubuntu: пошаговое руководство.
HTTP/2 в Apache доступен для использования в производственной среде начиная с версии 2.4.26. Для этого вам потребуется версия Apache 2.4.26 или более новая, собранная с модулем mod_http2, который отвечает за поддержку HTTP/2. В Ubuntu 20.04 установлена версия Apache 2.4.41, что можно проверить с помощью команды:
apache2 - v
Server version: Apache/2.4.41 (Ubuntu) Server built: 2020-04-13T17:19:17
После выполнения этих двух условий выполните следующие шаги, чтобы активировать HTTP/2 в Apache.
Активирование протокола HTTP/2 на виртуальном хосте Apache.
Сначала нужно активировать модуль HTTP/2.
sudo a2enmod http2
После этого нужно внести изменения в файл виртуального хоста Apache. Если вы активировали HTTPS с помощью Let’s Encrypt, то виртуальный хост для SSL будет создан как отдельный файл, который завершается на le-ssl.conf.
sudo nano /etc/apache2/sites-enabled/your-site-le-ssl.conf
Вставьте указанную директиву сразу после тега открытия.
Protocols h2 http/1.1
Сохраните файл и закройте его. После этого перезапустите Apache, чтобы изменения начали действовать.
sudo systemctl restart apache2
Если вы применяете mod_php
При использовании модуля mod_php с Apache вы задействуете модуль prefork MPM. К сожалению, этот модуль не поддерживает mod_http2. Чтобы обеспечить поддержку HTTP/2, вы можете переключиться на модуль event MPM, однако для этого PHP необходимо запускать через FastCGI, так как event MPM несовместим с mod_php. Ознакомьтесь с указанными ниже шагами, чтобы перейти с prefork на event MPM.
Деактивируйте модуль PHP7.
sudo a2dismod php7.4
Деактивируйте модуль prefork MPM.
sudo a2dismod mpm_prefork
Активируйте модули Event MPM, Fast_CGI и setenvif.
sudo a2enmod mpm_event proxy_fcgi setenvif
sudo apt install php7.4-fpm
sudo systemctl start php7.4-fpm
Активируйте PHP-FPM, чтобы он автоматически запускался при старте операционной системы.
sudo systemctl enable php7.4-fpm
Установите PHP-FPM в качестве обработчика PHP для Apache, выполнив команду, которая активирует файл /etc/apache2/conf-available/php7.4-fpm.conf.
sudo a2enconf php7.4-fpm
Перезапустите сервер Apache, чтобы новые настройки начали действовать.
sudo systemctl restart apache2
Тестирование
Как можно проверить, поддерживает ли ваш сайт протокол HTTP/2?
- В браузерах Firefox или Google Chrome откройте страницу вашего сайта и нажмите сочетание клавиш Ctrl+Shift+I, чтобы запустить Инструменты разработчика. Затем перейдите на вкладку «Сеть», где вы сможете увидеть протокол, используемый для вашего домена.
- Вы можете добавить расширение HTTP/2 и SPDY Indicator в браузер Google Chrome.
- Установите в Firefox расширение под названием HTTP/2 Indicator.
Учтите, что для корректной работы может понадобиться очистить кэш вашего браузера, так как некоторые кэшированные данные могут быть неверно обозначены с использованием протокола HTTP/1.1.
Как активировать Server Push.
HTTP/2 включает функцию, называемую «server push», позволяющую веб-серверу передавать ресурсы, которые не запрашивались браузером, но необходимы для отображения веб-страниц. Например, когда браузер запрашивает HTML-документ, сервер может предугадать, что клиенту понадобится соответствующий файл CSS, и отправить его вместе с HTML. Это избавляет от необходимости отдельного запроса на CSS со стороны браузера, сокращая количество взаимодействий.
В данном случае я привожу WordPress в качестве примера. Ниже представлены ресурсы, которые часто необходимы для создания сайта на этой платформе.
- style. css — это главный файл стилей, находящийся в корневой директории темы.
- jquery. js: библиотека jQuery
- jquery-migrate. min. js: устаревшая версия библиотеки JQuery.
- wp-embed. min. js: для интеграции видео контента.
Для того чтобы отправить эти ресурсы клиентам, добавьте указанные директивы в блок. Не забудьте заменить twentyseventeen на название вашей темы WordPress.
Header add Link "twentyseventeen/style. css>Добавьте заголовок Link с атрибутом rel=preload.Добавьте заголовок Link с атрибутом rel=preload.Добавьте заголовок Link с атрибутом rel=preload.;rel=preload"
Сохраните файл и закройте его. После этого перезапустите Apache, чтобы изменения начали действовать.
sudo systemctl restart apache2
Имейте в виду, что для удаления номера версии из файлов CSS и JavaScript в WordPress необходимо внести соответствующий код в файл functions.php. Если к этим файлам прикреплен номер версии, то функция обновления сервера не будет работать должным образом.
// Убрать версию WP из стилей
add_filter( ‘style_loader_src’, ‘remove_wp_version_from_css_js’, 9999 );
// Убрать версию WP из скриптов
add_filter( ‘script_loader_src’, ‘remove_wp_version_from_css_js’, 9999 );
// Функция для удаления номеров версий
function remove_wp_version_from_css_js( $src ) {
// Ваш код здесь
}
Проверка функции Server Push
В Google Chrome откройте нужную страницу и нажмите сочетание клавиш Ctrl+Shift+I, чтобы запустить инструменты разработчика. Затем перейдите на вкладку «Сеть». Обновите страницу, нажав F5. На скриншоте ниже видно, что server push активен на одном из моих сайтов. Если вы заметите «из кэша памяти», щелкните правой кнопкой мыши, очистите кэш браузера и перезагрузите страницу.
Примечание
При обновлении Apache или операционной системы может быть установлена новая версия модуля Apache PHP, что может привести к автоматическому отключению HTTP/2. Вам следует выполнить указанные выше шаги, чтобы снова отключить mod_php и активировать HTTP/2.
Следующий этап.
На этом все! Надеюсь, данный урок оказался полезным для активации HTTP/2 в Apache на Ubuntu 20.04 и использования server push. Кроме того, вы можете настроить веб-фаервол ModSecurity, чтобы обеспечить безопасность вашего сайта от атак.
- Как сконфигурировать ModSecurity для Apache на системах Debian/Ubuntu.
Если этот пост оказался для вас полезным, не забудьте подписаться на нашу бесплатную рассылку.
Если этот пост оказался для вас полезным, не забудьте подписаться на нашу бесплатную рассылку.

