在 RHEL 6.4 上手动构建和安装 Apache 2.4.x

Posted

技术标签:

【中文标题】在 RHEL 6.4 上手动构建和安装 Apache 2.4.x【英文标题】:Apache 2.4.x manual build and install on RHEL 6.4 【发布时间】:2013-12-05 09:56:58 【问题描述】:

操作系统:Red Hat Enterprise Linux Server 6.4 版(圣地亚哥)

当前在这个操作系统上 yum 安装的 apache 是 2.2.15。我需要最新的 2.4.x 分支,所以手动安装它。我已经记录了我进行的完整过程,包括预先将aprapr-util源解包到apache源中,但我想以下是该过程中最重要的部分:

GATHER LATEST APACHE AND APR
$ cd ~
$ mkdir apache-src
$ cd apache-src
$ wget http://apache.insync.za.net//httpd/httpd-2.4.6.tar.gz
$ tar xvf httpd-2.4.6.tar.gz
$ cd httpd-2.4.6
$ cd srclib
$ wget http://apache.insync.za.net//apr/apr-1.5.0.tar.gz
$ tar -xvzf apr-1.5.0.tar.gz
$ mv apr-1.5.0 apr
$ rm -f apr-1.5.0.tar.gz
$ wget http://apache.insync.za.net//apr/apr-util-1.5.3.tar.gz
$ tar -xvzf apr-util-1.5.3.tar.gz 
$ mv apr-util-1.5.3 apr-util

INSTALL DEVEL PACKAGES
yum update --skip-broken (There is a dependency issue with the latest Chrome needing the latest libstdc++, which is not available for RHEL and CentOS)
yum install apr-devel
yum install apr-util-devel
yum install pcre-devel

INSTALL
$ cd ~/apache-src/httpd-2.4.6
$ ./configure --prefix=/etc/httpd --enable-mods-shared="all" --enable-rewrite --with-included-apr
$ make
$ make install

注意:在上面运行时,/etc/http 为空。

在我尝试启动 httpd 服务之前似乎一切正常。似乎httpd.conf 中包含的每个模块都失败了,并显示类似于mod_rewrite 的消息:

httpd: Syntax error on line 148 of /etc/httpd/conf/httpd.conf: Cannot load /etc/httpd/modules/mod_rewrite.so into server: /etc/httpd/modules/mod_rewrite.so: undefined symbol: ap_global_mutex_create

我已经浏览了httpd.conf 中启用的模块列表,并一次将它们注释掉。如上所述都会触发错误,但是“未定义符号:值”通常不同(因此并不总是ap_global_mutex_create)。

我错过了一步吗?尽管我在 Google 上发现了该错误的一部分,但大多数解决方案都围绕着无法访问的 .so 文件。这似乎不是问题,模块存在于/etc/http/modules

注意:在上面运行时,/etc/http 为空。

【问题讨论】:

【参考方案1】:

您的程序正确但不完整。

安装后,您必须在 httpd.conf 中启用 SSL。并生成 server.crtserver.key 文件。 下面是完整的过程:

1.下载 Apache

cd /usr/src
wget http://www.apache.org/dist/httpd/httpd-2.4.23.tar.gz
tar xvf httpd-2.4.23.tar.gz

2。下载 APR 和 APR-Util

cd /usr/src
wget -c http://mirror.cogentco.com/pub/apache/apr/apr-1.5.2.tar.gz
wget -c http://mirror.cogentco.com/pub/apache/apr/apr-util-1.5.4.tar.gz
tar xvf apr-1.5.2.tar.gz
tar xvf apr-util-1.5.4.tar.gz

现在将您下载的 APR 和 APR-Util 放入您的 apache 源文件中。

mv apr-1.5.2 /usr/src/httpd-2.4.23/srclib/apr
mv apr-util-1.5.4 /usr/src/httpd-2.4.23/srclib/apr-util

3.编译

cd /usr/src/httpd-2.4.23
./configure --enable-so --enable-ssl --with-mpm=prefork --with-included-apr --with-included-apr-util
make
make install

正如您在 ./configure 命令中看到的,我们指定命令行选项以包括 apr 和 apr-utils。

4.在 httpd.conf 中启用 SSL

Apache配置文件httpd.conf位于/usr/local/apache2/conf下。

nano /usr/local/apache2/conf/httpd.conf

取消注释 /usr/local/apache2/conf/httpd.conf 文件中的 httpd-ssl.conf 包含行和 LoadModule ssl_module 行: p>

# LoadModule ssl_module modules/mod_ssl.so
# Include conf/extra/httpd-ssl.conf

查看 httpd-ssl.conf 以查看所有默认 SSL 配置。 在大多数情况下,您不需要修改此文件中的任何内容。

nano /usr/local/apache2/conf/extra/httpd-ssl.conf

在我们启动 Apache 之前需要 SSL 证书和密钥。 httpd-ssl.conf 中提到的 server.crtserver.key 文件需要在我们继续之前创建。

cd /usr/local/apache2/conf/extra
egrep 'server.crt|server.key' httpd-ssl.conf

SSLCertificateFile "/usr/local/apache2/conf/server.crt"
SSLCertificateKeyFile "/usr/local/apache2/conf/server.key"

5.生成 server.crt 和 server.key 文件

首先,使用 openssl 生成 server.key

cd /usr/src
openssl genrsa -des3 -out server.key 1024

上面的命令会要求输入密码。请务必记住此密码。稍后启动 Apache 时需要它。

接下来,使用上面的server.key文件生成一个证书请求文件(server.csr)。

openssl req -new -key server.key -out server.csr

最后,使用上面的server.keyserver.csr文件生成一个自签名的ssl证书(server.crt)。

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

server.keyserver.crt 文件复制到适当的 Apache 配置目录位置。

cp server.key /usr/local/apache2/conf/
cp server.crt /usr/local/apache2/conf/

6.启动 Apache

/usr/local/apache2/bin/apachectl start

如果您收到以下错误消息:

AH00526: Syntax error on line 51 of /usr/local/apache2/conf/extra/httpd-ssl.conf:
Invalid command 'SSLCipherSuite', perhaps misspelled or defined by a module not included in the server configuration

确保在 httpd.conf 中取消注释下面显示的行:

vi /usr/local/apache2/conf/httpd.conf

# LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

最后,这将提示您在启动 apache 之前输入您的私钥的密码。 验证 Apache httpd 进程是否在后台运行。

ps -ef | grep http

你应该看到类似的东西:

root    29529 1     0 13:08 ? 00:00:00 /usr/local/apache2/bin/httpd -k start
antoine 29530 29529 0 13:08 ? 00:00:00 /usr/local/apache2/bin/httpd -k start
antoine 29531 29529 0 13:08 ? 00:00:00 /usr/local/apache2/bin/httpd -k start
antoine 29532 29529 0 13:08 ? 00:00:00 /usr/local/apache2/bin/httpd -k start
root    29616 18260 0 13:09 pts/0 00:00:00 grep http

默认情况下,Apache SSL 在 443 端口上运行。打开网络浏览器并验证您是否可以使用 https://your-ip-address

访问您的 Apache

希望对你有所帮助,否则我建议你去看看:http://jasonpowell42.wordpress.com/2013/04/05/install-apache-2-4-4-on-centos-6-4/

【讨论】:

如何让它随服务器自动启动? @AntoineSubit 很棒的帖子。我为 RedHat 使用了它,它运行良好。步骤 3 中的小修正。编译 ./configure --enable-so --enable-ssl --with-mpm=prefork --with-included-apr --with-included-apr-util @Capricorn 谢谢。我用您的更正编辑我的答案【参考方案2】:
baprutil-1.la /usr/src/httpd-2.4.27/srclib/apr/libapr-1.la -lrt -lcrypt -lpthread -ldl -lcrypt
/usr/src/httpd-2.4.27/srclib/apr-util/.libs/libaprutil-1.so: undefined reference to `XML_GetErrorCode'
/usr/src/httpd-2.4.27/srclib/apr-util/.libs/libaprutil-1.so: undefined reference to `XML_SetEntityDeclHandler'
/usr/src/httpd-2.4.27/srclib/apr-util/.libs/libaprutil-1.so: undefined reference to `XML_ParserCreate'
/usr/src/httpd-2.4.27/srclib/apr-util/.libs/libaprutil-1.so: undefined reference to `XML_SetCharacterDataHandler'
/usr/src/httpd-2.4.27/srclib/apr-util/.libs/libaprutil-1.so: undefined reference to `XML_ParserFree'
/usr/src/httpd-2.4.27/srclib/apr-util/.libs/libaprutil-1.so: undefined reference to `XML_SetUserData'
/usr/src/httpd-2.4.27/srclib/apr-util/.libs/libaprutil-1.so: undefined reference to `XML_StopParser'
/usr/src/httpd-2.4.27/srclib/apr-util/.libs/libaprutil-1.so: undefined reference to `XML_Parse'
/usr/src/httpd-2.4.27/srclib/apr-util/.libs/libaprutil-1.so: undefined reference to `XML_ErrorString'
/usr/src/httpd-2.4.27/srclib/apr-util/.libs/libaprutil-1.so: undefined reference to `XML_SetElementHandler'
collect2: error: ld returned 1 exit status
make[2]: *** [htpasswd] Error 1
make[2]: Leaving directory `/usr/src/httpd-2.4.27/support'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/usr/src/httpd-2.4.27/support'
make: *** [all-recursive] Error 1

如果在./configure 中未指定--with-included-apr-util,则在make 步骤中收到此错误

【讨论】:

你的问题找到解决方案了吗

以上是关于在 RHEL 6.4 上手动构建和安装 Apache 2.4.x的主要内容,如果未能解决你的问题,请参考以下文章

RHEL 6.4(i386)安装MySQL 5.6的方法

Linux rhel 6.4 apache编译安装以及简单配置过程

RHEL 6.4 安装配置Nessus 7.0.0及操作手册

在 RHEL 6.4 上永久挂载 Netapp NFS 共享

1-linux系统管理之安装RHEL 6.4

Linux rhel 6.4 apache编译安装以及简单配置过程