我在 Centos 7 上运行以下版本的 Apache:
httpd.x86_64 2.4.6-97.el7.centos.5@updates
httpd-tools.x86_64 2.4.6-97.el7.centos.5 @updates
这是系统自带的默认软件包。我希望能够支持 http/2,但我找到的说明要求我使用该参数构建/配置软件。但是,我使用标准软件包以便于更新。有没有办法启用此功能并仍然使用相同的更新树?或者有没有更好的软件包/存储库可用?或者有没有办法配置现有安装以启用 http 2.0?我查看了但没有看到 mod_http2.so - 有没有办法安装它然后通过配置启用它,这样我就不必从头开始重新构建 Apache?
注意:有一个现有问题(CentOS 7 上基于 Apache 和 PHP7 的 HTTP/2)但这个问题已经有 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 协议的库。在自己的配置目录中配置较新的安装
像许多人一样新加坡软件包,此软件包旨在不与它所替换的软件包冲突的情况下进行安装,而不是更新它。通常在 中找到的大多数配置文件
/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
新的 shell 继承了附加环境:
# 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
切换服务
systemd服务已经可以使用这个新环境,因此这里不需要与上一个项目相关的内容
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/