С момента появления Всемирной паутины (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. Это можно сделать в браузере, открыв раздел developer tools в Google Chrome с помощью комбинации Ctrl + Shift + I
. Нажмите на вкладку «Network» и найдите столбец «Protocol».

Далее включите модуль 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
Вставьте следующую директиву после тега <VirtualHost *:443>
.
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
В браузере перезагрузите свой сайт. Затем вернитесь в раздел developer tools и убедитесь, что используется HTTP/2, что обозначается меткой h2
в столбце «Protocol».

При использовании модуля 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

Затем отключите модуль 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.
Source:
https://www.tecmint.com/enable-http2-in-apache-on-ubuntu/