大家早上好。我正在尝试弄清楚如何正确地将 Linux 服务器上的 httpd 从 2.2.14 升级到 2.2.34。以下是详细信息:
背景信息:我们的服务器都运行 RHEL 5.11,并且位于无法访问一般互联网的 DMZ 中。(我们不太可能打开防火墙进行在线升级,但这可能是一个没有实际意义的问题。)经过大量阅读,似乎在安装时,安装了社区版本的 httpd,而不是 Red Hat 随其发行版打包的版本。据我了解本文,这意味着我们无法使用“yum update httpd”。我们母公司为我们的 Linux 服务器聘请的支持供应商也不知道如何为我们升级,所以现在只能靠我了。
迄今为止尝试过的方法:由于没有其他好主意,支持供应商尝试在开发服务器上本地构建 2.2.34。这在 2.2.34 中是成功的似乎需要安装,但目前它无法为服务器上运行的应用程序提供服务——该应用程序仍然使用 2.2.14 进行交付。
可能有用的信息:目前,httpd 二进制文件安装在 /usr/sbin,配置和库位于 /etc/httpd。这是我运行 httpd -V 时看到的内容:
Server version: Apache/2.2.14 (Unix)
Server built: Oct 14 2009 13:20:11
Server's Module Magic Number: 20051115:23
Server loaded: APR 1.3.8, APR-Util 1.3.9
Compiled using: APR 1.3.8, APR-Util 1.3.9
Architecture: 64-bit
Server MPM: Prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT="/etc/httpd"
-D SUEXEC_BIN="/usr/sbin/suexec"
-D DEFAULT_PIDLOG="logs/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_LOCKFILE="logs/accept.lock"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="conf/mime.types"
-D SERVER_CONFIG_FILE="conf/httpd.conf"
较新的版本构建于 /etc/httpd/httpd-2.2.34/。在该目录中运行时,httpd -V 如下所示:
Server version: Apache/2.2.34 (Unix)
Server built: Nov 14 2017 09:46:53
Server's Module Magic Number: 20051115:43
Server loaded: APR 1.5.2, APR-Util 1.5.4
Compiled using: APR 1.5.2, APR-Util 1.5.4
Architecture: 64-bit
Server MPM: Prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT="/usr/local/apache2"
-D SUEXEC_BIN="/usr/local/apache2/bin/suexec"
-D DEFAULT_PIDLOG="logs/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_LOCKFILE="logs/accept.lock"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="conf/mime.types"
-D SERVER_CONFIG_FILE="conf/httpd.conf"
在我看来,它构建得正确,但我不知道如何查看它是否真的作品。
我需要回答的问题:
1)如果新版本确实构建正确,并且可以如果要运行,我该如何强制系统使用较新的版本?(我可以找出配置更改以使其加载应用程序,但 ps aux | grep“httpd”显示它甚至没有运行。)
2)有没有更简单的方法可以做到这一点?我读过“升级”说明在 Apache 站点上,但是我在系统中的任何地方都找不到 config.nice 文件。
我很感激任何帮助。我可以根据需要提供更多信息。
答案1
您已正确构建了 httpd,但从源代码构建的版本的默认目录是/usr/local/apache2
,如果您以 root 身份执行此操作,make && make install
它将安装在那里。通常的方法是符号链接/usr/local/apache2
到/etc/httpd
以保持一致性。查看初始安装,移动/etc/httpd
并创建符号链接到/usr/local/apache2
应该适用于您的 init 文件,但您也可以检查它是否与您的安装相匹配。
如果您需要再次执行此操作,您还可以考虑构建一个 RPM,apache 源附带一个可以执行此操作的构建文件,并且可以在运行 CentOS 5.11 的 VM 上运行它。