1 概述

目前CENTOS7默认安装是HTTPD2.4,但是CENTOS6上默认是安装HTTPD2.2,CENTOS6如果要安装HTTPD2.4,需要通过编译安装实现,一般情况下,centOS7默认是安装httpd2.4,除非要自己编译特殊的模块,否则建议见用yum进行安装httpd2.4的服务包就可以。

编译安装HTTPD2.4需要涉及APR,本文将介绍一下APR基本概念,同时介绍两种在centos6上编译HTTPD2.4方法,以及在centos7上编译安装HTTPD2.4

2  APR概念

apache的项目,apache支持跨平台,但是window和linux的系统调用机制不一样

APR就会去处理不同系统间的问题,应用开发人员面对的是APR的接口,而不是操作系统接口开发

APR针对的是apache的项目软件

.APR(Apache portable Run-time

libraries,Apache可移植运行库)主要为上层的应用程序提供一个可以跨越多操作系统平台使用的底层支持接口库。在早期的Apache版本中,应用程序本身必须能够处理各种具体操作系统平台的细节,并针

对不同的平台调用不同的处理函数

.随着Apache的进一步开发,Apache组织决定将这些通用的函数独立出来并发展成为一个新的项目。这样,APR的开发就从Apache中独立出来,Apache仅仅是使用APR而已。目前APR主要还是由Apache使用,由于APR的较好的移植性,因此一些需要进行移植的C程序也开始使用APR,开源项目比如用于服务器压力测试的Flood loader tester,该项目不仅仅适用于Apache,http://httpd.apache.org/test/flood

3 centos6上编译HTTPD2.4

方法一

环境:centos6.9 apr-1.6.2.tar.gz apr-util-1.6.0.tar.gz   httpd-2.4.27.tar.bz2

apr的版本需要是1.4以上

#1 安装包组
yum -y groupinstall "Development tools"
 yum -y install openssl-devel pcre-devel expat-devel 
#2 创建账号
mkdir  /app/website
useradd -r -d  /app/website -s /sbin/nologin apache  
#3 解压安装包
tar xvf apr-1.6.2.tar.gz -C /usr/local
tar xvf  apr-util-1.6.0.tar.gz   -C /usr/local
tar xvf  httpd-2.4.27.tar.bz2   -C /usr/local
#4 编译apr
cd /usr/local/apr-1.6.2
./configure --prefix=/usr/local/apr
 make & make install
#5 编译apr-util
cd /usr/local/apr-util-1.6.2
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
 make & make install
#6 编译httpd24
cd /usr/local/httpd-2.4.27
 ./configure --prefix=/app/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr/ --with-apr-util=/usr/local/apr-util/ --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork
  make & make install
#7 修改配置文件
vim  /app/httpd24/conf/httpd.conf
user apache
group apache
Documentroot /app/website
<directory /app/website>
#8 将编译的httpd24执行文件路径导入PATH变量
vim /etc/profile.d/httpd24.sh
PATH=/app/httpd24/bin:$PATH
#保存后执行 
 . /etc/profile.d/httpd24.sh
#9 拷贝其他机器的httpd脚本进行相关修改
scp 172.18.50.61:/etc/init.d/httpd /etc/init.d/httpd24
vim /etc/init.d/httpd24
apachectl=/app/httpd24/bin/apachectl
httpd=${HTTPD-/app/httpd24/bin/httpd}
pidfile=${PIDFILE-/app/httpd24/logs/httpd24.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd24}
#保存后,执行如下的语句
chkconfig --add httpd24
chkconfig httpd24 on
service httpd24 start
#这样就可以用service 来查看启动服务,7上启动脚本是二进制,不能通过用户自己编写shell服务启动脚本实现,
#这个是6和7的区别,因为在7上执行service httpd restart的时候,会被重定向另一个语句, 
# Redirecting to /bin/systemctl restart  httpd.service而执行chkconfig httpd on ,
# 会被重定向另一个语句执行,Note: Forwarding request to 'systemctl enable httpd.service'。 
# 并不是通过httpd的启动脚本执行的。所以在7上如果要开机启动,编译安装的话,
# 就要在/etc/rc.d/rc.local里写入 /app/httpd24/bin/apachectl  start
#这个语句,实现开机启动。同时编译安装的http24,在7上由于没有httpd这个脚本,
#所以必须通过apachectl来控制httpd24这个服务。
#10 创建主站点文件
mkdir /app/website
echo "I am sunny in cent65E under /app/website" > /app/website/index.html
#11 测试
#启动服务
service httpd24 restart
#或者 
apachectl start
#在浏览器输入该http链接,如 http://172.18.50.65/


方法2

不用独立编译apr 和apr-util,将这个包放到/usr/local/httpd-2.4.27/srclib路径下,并将服务包目录改名为apr 和apr-util,编译时关键参数是--with-included-apr,进行统一编译

即方法一中的4,5,6三步合成如下这个操作,其他步骤不变

cp -r /usr/local/apr-1.6.2 /usr/local/httpd-2.4.27/srclib/apr
cp -r /usr/local/apr-util-1.6.0 /usr/local/httpd-2.4.27/srclib/apr-util
cd  /usr/local/httpd-2.4.27/srclib/apr
./configure --prefix=/app/httpd24  --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork

4 centos7源码编译httpd2.4

如果centOS7上的apr和apr-util已经是1.4版本以上,就不要在编译apr和apr-util了,如果机器上没有apr和apr-util或者版本较低,参照centOS6的方法编译安装apr和apr-util

#1 安装编译包组 
yum groupinstall "development tools"
yum -y install apr-devel apr-util-devel openssl-devel pcre-devel 
#2 创建账号
mkdir  /app/website
useradd -r -d  /app/website -s /sbin/nologin apache  
#3 解压安装包
tar xvf apr-1.6.2.tar.gz -C /usr/local
tar xvf  apr-util-1.6.0.tar.gz   -C /usr/local
tar xvf  httpd-2.4.27.tar.bz2   -C /usr/local
#4  编译安装
 cd  /usr/local/src/httpd-2.4.27/
./configure --prefix=/app/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre  --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork
make  && make install
#5 修改配置文件
vim /app/httpd24/conf/httpd.conf
User apache
Group apache
#6 将编译的httpd24执行文件路径导入PATH变量
vim /etc/profile.d/httpd24.sh
PATH=/app/httpd24/bin:$PATH
#保存后执行  ". /etc/profile.d/httpd24.sh"
#7 vim /etc/rc.d/rc.local
/app/httpd24/bin/apachectl start
chmod +x   /etc/rc.d/rc.local
#注意,这里和centos6不一样,不能自己创建httpd文件,所以,只能通过apachectl这个工具来控制httpd
#8 测试
#启动服务
apachectl -k start
#这里和centOS6语法不同,需要加选项-k
#在浏览器输入该http链接,如 http://172.18.50.65/