Как включить 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
Check Apache Version in Ubuntu

Из вывода можно увидеть, что мы используем последнюю версию, которой является Apache 2.4.41 на момент написания этой статьи.

Включение HTTP/2 на виртуальном хосте Apache

Чтобы начать, сначала убедитесь, что веб-сервер работает с HTTP/1.1. Это можно сделать в браузере, открыв раздел developer tools в Google Chrome с помощью комбинации Ctrl + Shift + I. Нажмите на вкладку «Network» и найдите столбец «Protocol».

Confirm HTTP Protocol Version

Далее включите модуль HTTP/2 в Ubuntu, выполнив следующую команду.

$ sudo a2enmod http2
Enable HTTP/2 on Ubuntu

Затем найдите и отредактируйте файл виртуального хоста SSL, если вы включили HTTPS с помощью Let’s Encrypt, будет создан новый файл с суффиксом le-ssl.conf.

$ sudo vim /etc/apache2/sites-enabled/your-domain-name-le-ssl.conf

Вставьте следующую директиву после тега <VirtualHost *:443>.

Protocols h2 http/1.1
Enable HTTP/2 on Apache

Чтобы сохранить изменения, перезапустите веб-сервер Apache.

$ sudo systemctl restart apache2

Чтобы проверить, включен ли HTTP/2, получите заголовки HTTP с помощью следующей команды curl, как показано ниже.

$ curl -I --http2 -s https://domain.com/ | grep HTTP
Check HTTP/2 Support in Apache

Вы должны получить следующий результат.

HTTP/2 200

В браузере перезагрузите свой сайт. Затем вернитесь в раздел developer tools и убедитесь, что используется HTTP/2, что обозначается меткой h2 в столбце «Protocol».

Confirm HTTP/2 Protocol Version

При использовании модуля mod_php с Apache

Если вы используете Apache вместе с модулем mod_php, вам необходимо переключиться на PHP-FPM. Это связано с тем, что модуль mod_php использует модуль prefork MPM, который не поддерживается HTTP/2. Вам нужно удалить модуль prefork MPM и переключиться на модуль mpm_event, который будет поддерживаться HTTP/2.

Если вы используете модуль PHP 7.4 mod_php, например, отключите его, как показано ниже:

$ sudo a2dismod php7.4 
Disable mod_php Module

Затем отключите модуль prefork MPM.

$ sudo a2dismod mpm_prefork
Disable Prefork MPM in Apache

После отключения модулей активируйте модули Event MPM, Fast_CGI и setenvif, как показано ниже.

$ sudo a2enmod mpm_event proxy_fcgi setenvif
Enable Event MPM in Apache

Установите 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
Check HTTP/2 Protocol in Apache

Вы можете также воспользоваться инструментами разработчика в браузере Google Chrome, чтобы проверить, как ранее было документировано. Мы подошли к концу этого руководства. Надеемся, что вы нашли информацию полезной и сможете легко активировать HTTP/2 на сервере Apache.

Source:
https://www.tecmint.com/enable-http2-in-apache-on-ubuntu/