Apache + HTTP/2 на CentOS 7


Тематические термины: Apache, CentOS, HTTP/2
За поддержку данной функциональной возможности в Apache отвечает модуль http2_module. Для этого версия программного обеспечения веб-сервера должна быть 2.4.17 и выше. Также необходима библиотека TLS с поддержкой расширения ALPN (OpenSSL 1.0.2 и выше). В инструкции приведены примеры работы на операционной системе Linux CentOS, однако, принцип настройки apache http/2 схож и для других систем, например, Ubuntu, Debian. Рассмотренные варианты помогут как установить веб-сервер с нуля, так и перейти на 2-ю версию протокола на имеющемся сервере.
Обновляем или установливаем Apache
Генерируем сертификат
Настраиваем Apache
Тестируем настройку
Используем настройку для виртуального домена
Смотрите также
1. Обновление Apache
Если httpd еще не установлен, выполняем команду:
yum install httpd
Проверяем версию веб-сервера apache следующей командой:
httpd -v
Если она ниже 2.4.17, обновляем пакет.
На момент написания статьи, в стандартном репозитории CentOS не было подходящей версии Apache. Для начала, ставим epel:
yum install epel-release
Добавляем репозиторий от CodeIT:
cd /etc/yum.repos.d
wget https://repo.codeit.guru/codeit.el`rpm -q --qf "%{VERSION}" $(rpm -q --whatprovides redhat-release)`.repo
* если система выдаст ошибку, ставим wget командой yum install wget.
Обновляем httpd:
yum update httpd
Как правило, необходимый модуль устанавливается с обновлением. Но если этого не произошло, его можно установить следующей командой:
yum install mod_http2
* в Ubuntu установка модуля происходит командой a2enmod http2.
С версии Apache 2.4.27 Multi-Processing Module (MPM) prefork не поддерживает http/2 и можно увидеть предупреждение the mpm module (prefork.c) is not supported by mod_http2. Необходимо перейти на использование другого MPM — event или worker.
2. Создание сертификата
В качестве примера, будем использовать самоподписный сертификат. Создаем каталог для хранения ключей:
mkdir /etc/httpd/ssl
Генерируем сертификаты:
openssl req -new -x509 -days 1461 -nodes -out /etc/httpd/ssl/cert.pem -keyout /etc/httpd/ssl/cert.key -subj "/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=test.dmosk.local/CN=test"
В боевой среде желательно использовать корректный сертификат. Для этого его можно купить или сгенерировать в Let's Encrypt бесплатно.
3. Настройка Apache
Устанавливаем модуль поддержки ssl:
yum install mod_ssl
Открываем на редактирование следующий файл:
vi /etc/httpd/conf.d/ssl.conf
Редактируем следующие строки:
SSLCertificateFile /etc/httpd/ssl/cert.pem
...
SSLCertificateKeyFile /etc/httpd/ssl/cert.key
Проверяем настройки apache и перезапускаем его:
apachectl configtest
apachectl graceful
4. Тестирование
На этом основная настройка завершена. Чтобы проверить работу http/2, открываем браузер с установленным плагином «HTTP/2 and SPDY indicator» или пользуемся онлайн тестом — geekflare.com/tools/http2-test. Переходим по адресу https://<IP-адрес сервера>
Если мы генерировали самоподписный сертификат, браузер может выдать ошибку безопасности, игнорируем ее, продолжая загрузку сайта.
Настройка виртуального домена
Если необходима настройка нескольких доменов, настройка http/2 для конкретного из них выполняется следующим образом:
vi /etc/httpd/conf.d/virtual_domain.conf
<VirtualHost *:443>
ServerName site.ru
DocumentRoot /usr/share/httpd/noindex
Protocols h2 http/1.1
SSLEngine on
SSLCertificateFile ssl/cert.pem
SSLCertificateKeyFile ssl/cert.key
</VirtualHost>
* ServerName — домен сайта; DocumentRoot — расположение файлов сайта в системе; Protocols — версия протокола, в данном случае, http2 и http 1.1; SSLCertificateFile и SSLCertificateKeyFile — пути до файлов ключей, которые были сгенерированы нами ранее.
* напротив, чтобы запретить http/2 и принудительно использовать его первую версию, необходимо указать Protocols h1 http/1.1.