Как включить HTTP/2 в Apache в Ubuntu
С момента создания Всемирной паутины (www) протокол HTTP развивался на протяжении многих лет, обеспечивая безопасную и быструю доставку цифрового контента по сети. Интернет.
Наиболее широко используемой версией является HTTP 1.1, и хотя она содержит усовершенствования функций и оптимизацию производительности для устранения недостатков более ранних версий, ей не хватает некоторых других важных функций, которые были реализованы в HTTP/2.
Каковы ограничения HTTP/1.1?
Протокол HTTP/1.1 имеет следующие недостатки, которые делают его менее идеальным, особенно при работе с веб-серверами с высоким трафиком:
- Задержки при загрузке веб-страниц из-за длинных HTTP-заголовков.
- HTTP/1.1 может отправлять только один запрос для каждого файла на одно TCP-соединение.
- Учитывая, что HTTP/1.1 обрабатывает один запрос для каждого TCP-соединения, браузеры вынуждены отправлять поток параллельных TCP-соединений для одновременной обработки запросов. Это приводит к перегрузке TCP и, в конечном итоге, к потере пропускной способности и ухудшению качества сети.
Вышеупомянутые проблемы часто приводили к снижению производительности и высоким накладным расходам на использование полосы пропускания. HTTP/2 появился для решения этих проблем и теперь является будущим протоколов HTTP.
Преимущества использования HTTP/2
Он предлагает следующие преимущества:
- Сжатие заголовков, которое сводит к минимуму клиентские запросы и тем самым снижает потребление полосы пропускания. Результатом является высокая скорость загрузки страниц.
- Мультиплексирование нескольких запросов по одному TCP-соединению. И сервер, и клиент могут разбить HTTP-запрос на несколько кадров и перегруппировать их на другом конце.
- Более высокая производительность в Интернете, что, как следствие, приводит к лучшему рейтингу SEO.
- Повышенная безопасность, поскольку большинство основных браузеров загружают HTTP/2 вместо HTTPS.
- HTTP/2 считается более удобным для мобильных устройств благодаря функции сжатия заголовков.
Тем не менее, мы собираемся включить HTTP/2 на Apache в Ubuntu 20.04 LTS и Ubuntu 18.04 LTS.
Предпосылки:
Прежде чем приступить к работе, убедитесь, что вы включили HTTPS на веб-сервере Apache, прежде чем включать HTTP/2. Это связано с тем, что все основные веб-браузеры поддерживают HTTP/2 вместо HTTPS. У меня есть доменное имя, указывающее на экземпляр в Ubuntu 20.04, на котором работает сервер Apache, защищенный с помощью сертификата Let’s Encrypt.
Кроме того, рекомендуется использовать Apache 2.4.26 и более поздние версии для рабочих серверов, намеревающихся перейти на HTTP/2.
Чтобы проверить версию Apache, которую вы используете, выполните команду:
apache2 -v
Из вывода видно, что мы используем последнюю версию — Apache 2.4.41 на момент написания этой статьи.
Включите HTTP/2 на виртуальном хосте Apache
Чтобы начать работу, сначала убедитесь, что на веб-сервере работает HTTP/1.1. Это можно сделать в браузере, открыв раздел инструментов разработчика в Google Chrome с помощью комбинации Ctrl +SHIFT + I
. Перейдите на вкладку «Сеть» и найдите столбец «Протокол».
Затем включите модуль HTTP/2 в Ubuntu, выполнив следующую команду.
sudo a2enmod http2
Затем найдите и отредактируйте файл виртуального хоста SSL. Если вы включили HTTPS с помощью Let's Encrypt, новый файл будет создан с помощью le-ssl.conf. суффикс.
sudo vim /etc/apache2/sites-enabled/your-domain-name-le-ssl.conf
Вставьте приведенную ниже директиву после тега
.
Protocols h2 http/1.1
Чтобы сохранить изменения, перезапустите веб-сервер Apache.
sudo systemctl restart apache2
Чтобы проверить, включен ли HTTP/2, извлеките заголовки HTTP, используя следующую команду curl, как показано.
curl -I --http2 -s https://domain.com/ | grep HTTP
Вы должны получить показанный результат.
HTTP/2 200
В браузере перезагрузите сайт. Затем вернитесь к инструментам разработчика и подтвердите HTTP/2, обозначенный меткой h2
в столбце «Протокол».
При использовании модуля mod_php с Apache
Если вы используете Apache вместе с модулем mod_php, вам необходимо переключиться на PHP-FPM. Это связано с тем, что модуль mod_php использует модуль prefork MPM, который не поддерживается HTTP/2. Вам необходимо удалить префорк MPM и переключиться на модуль mpm_event, который будет поддерживаться HTTP/2.
Например, если вы используете модуль PHP 7.4 mod_php, отключите его, как показано:
sudo a2dismod php7.4
После этого отключите модуль prefork MPM.
sudo a2dismod mpm_prefork
После отключения модулей включите модули Event MPM, Fast_CGI и setenvif, как показано.
sudo a2enmod mpm_event proxy_fcgi setenvif
Установите PHP-FPM в Ubuntu
Затем установите и запустите PHP-FPM, как показано.
sudo apt install php7.4-fpm
sudo systemctl start php7.4-fpm
Затем включите PHP-FPM, чтобы он запускался во время загрузки.
sudo systemctl enable php7.4-fpm
Затем включите PHP-FPM в качестве обработчика PHP Apache и перезапустите веб-сервер Apache, чтобы изменения вступили в силу.
sudo a2enconf php7.4-fpm
Включить поддержку HTTP/2 в Apache Ubuntu
Затем включите модуль HTTP/2, как и раньше.
sudo a2enmod http2
Перезапустите Apache, чтобы синхронизировать все изменения.
sudo systemctl restart apache2
Наконец, вы можете проверить, использует ли ваш сервер протокол HTTP/2, с помощью команды Curl, как показано.
curl -I --http2 -s https://domain.com/ | grep HTTP
Вы также можете использовать инструменты разработчика в браузере Google Chrome для проверки, как описано ранее. Мы подошли к концу этого руководства. Мы надеемся, что информация оказалась для вас ценной и вы сможете легко включить HTTP/2 на Apache.