С момента создания Всемирной паутины (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/2
Протокол 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.
У нас есть доменное имя, указывающее на конкретный сервер на 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
Вставьте указанную ниже директиву после тега <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
Перезагрузите страницу в браузере. Затем вернитесь к инструментам разработчика и проверте наличие HTTP/2, он будет обозначен меткой h2 в столбце «Протокол»:
Использование модуля mod_php с Apache
Если вы используете Apache вместе с модулем mod_php, вам нужно переключиться на PHP-FPM. Это связано с тем, что модуль mod_php использует модуль MPM prefork, который не поддерживается 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.
Спасибо за уделенное время на прочтение статьи!
Также предлагаем прочесть статью: Как установить Apache, MySQL/MariaDB и PHP на RHEL 8?
Если возникли вопросы, задавайте их в комментариях.
Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!
Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Cisco, курсы по кибербезопасности, полный курс по кибербезопасности, курсы DevNet (программируемые сети) от Академии Cisco, курсы Linux от Linux Professional Institute на платформе SEDICOMM University (Университет СЭДИКОММ).
Курсы Cisco и Linux с трудоустройством!
- Поможем стать экспертом в сетевом администрировании и получить международные сертификаты Cisco CCNA Routing & Switching или Linux LPI.
- Предлагаем проверенную программу и учебник экспертов из Cisco Networking Academy и Linux Professional Institute, сертифицированных инструкторов и личного куратора.
- Поможем с трудоустройством и сделать карьеру. 100% наших выпускников трудоустраиваются.
- Проводим вечерние онлайн-лекции на нашей платформе или обучайтесь очно на базе Киевского офиса.
- Спросим у вас об удобном времени для практик и подстроимся: понимаем, что времени учиться мало.
- Если хотите индивидуальный график — обсудим и осуществим.
- Выставим четкие дедлайны для самоорганизации. Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.
- отредактировать резюме;
- подготовиться к техническим интервью;
- подготовиться к конкурсу на понравившуюся вакансию;
- устроим на работу в Cisco по программе Cisco Incubator, New Graduate и Experienced. Наши студенты, которые уже работают там: жмите на #НашиВCisco Вконтакте, #НашиВCisco Facebook.