Apache + HTTP/2 на CentOS 7

Обновлено и опубликовано Опубликовано:

Тематические термины: ApacheCentOS, HTTP/2

За поддержку данной функциональной возможности в Apache отвечает модуль http2_module. Для этого версия программного обеспечения веб-сервера должна быть 2.4.17 и выше. Также необходима библиотека TLS с поддержкой расширения ALPN (OpenSSL 1.0.2 и выше). В инструкции приведены примеры работы на операционной системе Linux CentOS, однако, принцип настройки apache http/2 схож и для других систем, например, Ubuntu, Debian. Рассмотренные варианты помогут как установить веб-сервер с нуля, так и перейти на 2-ю версию протокола на имеющемся сервере.

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» или пользуемся онлайн тестом — tools.keycdn.com/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.

Смотрите также

Как настроить NGINX для HTTP/2

Как настроить HTTP/2 на Windows Server

# Серверы # Интернет # UNIX # Linux # CentOS
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет