Поиск по сайту:

Как включить HTTP/2 в Apache в Ubuntu


С момента создания Всемирной паутины (www) протокол HTTP развивался на протяжении многих лет, обеспечивая безопасную и быструю доставку цифрового контента по сети. Интернет.

Наиболее широко используемой версией является HTTP 1.1, и хотя она содержит усовершенствования функций и оптимизацию производительности для устранения недостатков более ранних версий, ей не хватает некоторых других важных функций, которые были реализованы в HTTP/2.

Каковы ограничения HTTP/1.1?

Протокол HTTP/1.1 имеет следующие недостатки, которые делают его менее идеальным, особенно при работе с веб-серверами с высоким трафиком:

  1. Задержки при загрузке веб-страниц из-за длинных HTTP-заголовков.
  2. HTTP/1.1 может отправлять только один запрос для каждого файла на одно TCP-соединение.
  3. Учитывая, что HTTP/1.1 обрабатывает один запрос для каждого TCP-соединения, браузеры вынуждены отправлять поток параллельных TCP-соединений для одновременной обработки запросов. Это приводит к перегрузке TCP и, в конечном итоге, к потере пропускной способности и ухудшению качества сети.

Вышеупомянутые проблемы часто приводили к снижению производительности и высоким накладным расходам на использование полосы пропускания. HTTP/2 появился для решения этих проблем и теперь является будущим протоколов HTTP.

Преимущества использования HTTP/2

Он предлагает следующие преимущества:

  1. Сжатие заголовков, которое сводит к минимуму клиентские запросы и тем самым снижает потребление полосы пропускания. Результатом является высокая скорость загрузки страниц.
  2. Мультиплексирование нескольких запросов по одному TCP-соединению. И сервер, и клиент могут разбить HTTP-запрос на несколько кадров и перегруппировать их на другом конце.
  3. Более высокая производительность в Интернете, что, как следствие, приводит к лучшему рейтингу SEO.
  4. Повышенная безопасность, поскольку большинство основных браузеров загружают HTTP/2 вместо HTTPS.
  5. 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.