Я использую следующую версию Apache на Centos 7:
httpd.x86_64 2.4.6-97.el7.centos.5 @обновления
httpd-tools.x86_64 2.4.6-97.el7.centos.5 @обновления
Это пакет по умолчанию, который поставляется с системой. Я хочу иметь возможность поддерживать http/2, но инструкции, которые я нашел, требуют, чтобы я собрал/настроил программное обеспечение с этим параметром. Однако я использую стандартный пакет для простоты обновления. Есть ли способ включить эту функцию и по-прежнему использовать то же дерево обновлений? Или есть лучший пакет/репозиторий для использования? Или есть ли способ настроить существующую установку для включения http 2.0? Я посмотрел и не увидел mod_http2.so — есть ли способ установить его, а затем включить через конфигурацию, чтобы мне не пришлось пересобирать Apache с нуля?
ПРИМЕЧАНИЕ: Существует существующий вопрос (HTTP/2 на CentOS 7 на Apache с PHP7) об этом, но ему уже 5 лет, и я надеюсь на более актуальный ответ, так как в то время было сказано, что http/2 не был таким стабильным/поддерживаемым
решение1
CentOS7 по умолчанию использует Apache httpd 2.4.6, который не предоставляет mod_http2.so
модуль для реализации HTTP/2.
Вот как это сделать с поддерживаемым программным обеспечением и без перекомпиляции:
включитьРепозиторий коллекций программного обеспечения
Это поддерживаемые дополнительные пакеты, включая новые версии существующих пакетов. Они устанавливаются в отдельный каталог (обычно
/opt/rh
), поэтому не будут конфликтовать с исходной версией. Это также означает, что для использования некоторых их функций потребуется немного больше усилий.yum install centos-release-scl
Это установит новый репозиторий с дополнительными пакетами.
Установить
httpd24
yum install httpd24
который в основном будет извлекать фактический пакет
httpd24-httpd
и, что более важно для этого ответа, будет извлекать по очередиhttpd24-libnghttp2
: библиотеку, реализующую протокол HTTP/2.настроить новую установку в ее собственных каталогах конфигурации
Как и многиеСКЛpackages, этот пакет предназначен для установки без конфликта с пакетом, который он заменяет, а не для его обновления. Большинство файлов конфигурации, которые обычно находятся в,
/etc/httpd
теперь находятся в/opt/rh/httpd24/root/etc/httpd
.Поэтому, пожалуйста, скопируйте и адаптируйте (если в конфигурациях и т.п. есть абсолютные ссылки на каталоги) настройки в новом месте:
/opt/rh/httpd24/root/etc/httpd
В этой версии включен HTTP/2:
# grep -r http2 /opt/rh/httpd24/root/etc/httpd/ /opt/rh/httpd24/root/etc/httpd/conf.modules.d/00-base.conf:LoadModule http2_module modules/mod_http2.so
проверьте синтаксис и т.д.
Это часть особенностей SCL. Необходимо запустить подготовительные команды, чтобы использовать правильный путь и библиотеки для добавленных компонентов.
Интерактивно (но вместо этого можно немедленно выполнить неинтерактивную команду):
# scl enable httpd24 -- bash -l
Новая оболочка наследует дополнительную среду:
# printenv |grep /opt/rh MANPATH=/opt/rh/httpd24/root/usr/share/man: LIBRARY_PATH=/opt/rh/httpd24/root/usr/lib64 LD_LIBRARY_PATH=/opt/rh/httpd24/root/usr/lib64 PATH=/opt/rh/httpd24/root/usr/bin:/opt/rh/httpd24/root/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/bin PKG_CONFIG_PATH=/opt/rh/httpd24/root/usr/lib64/pkgconfig
и теперь может выполнять такие команды, как:
# httpd -v Server version: Apache/2.4.34 (Red Hat) Server built: Feb 1 2022 14:11:48
Переключить услугу
системдслужбы уже созданы для использования этой новой среды, поэтому ничего, связанного с предыдущим пунктом, здесь не требуется
systemctl disable --now httpd systemctl enable --now httpd24-httpd
решение2
Инструкции для Red Hat/Fedora смотрите здесь:https://www.ubuntupit.com/how-to-enable-http-2-in-apache-on-linux-system/