我在 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 上的 HTTP/2 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 協定的函式庫。在其自己的配置目錄中配置較新的安裝
像許多人一樣SCL包,此包的安裝目的是不要與它所替換的包發生衝突,而不是更新它。通常在 中找到的大多數設定檔
/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
切換服務
系統服務已經可以使用這個新環境,因此這裡不需要與上一個項目相關的任何內容
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/