编译安装apache最新版

为了自己搭建nginx+apache+mariadb+php7,我自己尝试编译安装所有的环境软件。之前已经介绍过nginx的编译安装,今天来介绍一下apache的编译安装。

基础编译环境

编译需要gcc等基础的编译软件支持,因此我们先执行以下命令:

yum -y groupinstall "Development tools"
yum -y groupinstall "Server Platform Development"
yum install zlib-devel pcre-devel

这样,基本解决了要安装的所有环境支持。

下载、apr和apr-util

apr是一个服务器底层支持平台,虽然没有这个模块apache也能跑,但是无法与其他软件连接,比如php,因此要在编译的时候,注意apr和apr-util。

我们去apache官网下载最新的版本。例如目前最新的是2.4.18版本,在命令行执行如下:

wget http://apache.dataguru.cn//httpd/httpd-2.4.18.tar.gz
tar zxf httpd-2.4.18.tar.gz
cd httpd-2.4.18/srclib

接下来是处理apr和apr-util,不需要事先去安装,只需要把对应的源码放到httpd源码对应目录下,在编译httpd的时候可以同时编译apr。下载apr和apr-util,然后执行下面命令:

wget http://mirrors.cnnic.cn/apache//apr/apr-1.5.2.tar.gz
wget http://mirrors.cnnic.cn/apache//apr/apr-util-1.5.4.tar.gz
tar zxf apr-1.5.2.tar.gz
mv apr-1.5.2 apr
tar zxf apr-util-1.5.4.tar.gz
mv apr-util-1.5.4 apr-util

OK,通过下载解压和重命名,我们把apr、apr-util的源码放在的了httpd源码包的srclib的目录下。

编译和安装

接下来,就回到httpd的源码目录,执行configure:

./configure --prefix=/usr/local/apache \
--with-included-apr \
--enable-nonportable-atomics=yes \
--enable-so \
--enable-mods-shared=most \
--with-mpm=worker \
--enable-ssl \
--with-port=8080

由于apache是模块化配置的,因此,上面的配置选项比较少,apache会把所有的模块先编译好,如果我们需要启用该模块,则到配置文件中去掉注释即可。在上面的的编译配置中,我们增加了 --with-included-apr选项,这个选项可以让编译自动使用我们刚才下载解压出来的apr,最后一个选项是可选的,因为本文开头说了,我们打算使用nginx+apache的架构,80端口是留给nginx,所以把8080端口给了apache,之后,我们会用nginx来代理php请求,将请求转发给apache来处理(当然,不是本文来讲,会有专门的文章来讲)。

接下来就是编译安装:

make
make install

如果过程中没有报错,说明安装成功。

修改配置

apache的配置文件为/usr/local/apache/conf/httpd.conf,我们可以对apache的各个模块和其他配置进行修改。本文是在nginx+apache的架构下面,所以,会对运行apache的用户和用户组,网站根路径进行调整。

我事先创建了一个webmaster用户组,然后在这个组下面有nginx、apache、administrator用户,administrator用户是作为一个特殊用户的,用它来登陆服务器进行管理(不设置密码,使用ssh密钥登陆,使用sudo),同时使用sftp登陆上传网页文件。而apache就用于运行httpd。

如果你在后文的启动apache时,出现 httpd: Could not reliably determine the server's fully qualified domain name 错误,则可以修改配置文件中的ServerName项,我一般会改为120.0.0.1:8080即可。

载入服务

虽然apache已经安装好了,但是我们还不能像平时一样使用service httpd start | stop这样的命令来启动和停用服务。按照下面的方法来实现这个。

cp /usr/local/apache2/bin/apachectl /etc/init.d/httpd
vi /etc/init.d/httpd

在/etc/init.d/httpd文件的#!/bin/sh 下面加入两行:

# chkconfig: 35 85 15
# description: Activates/Deactivates Apache 2.4.18

为什么呢?因为必须要加入这两行,才能执行下面的chkconfig,否则会报错。接下来才将httpd加入服务列表:

chkconfig --add httpd
chkconfig httpd on

OK,这下子可以使用service httpd start启动apache了。

在浏览器中使用IP地址:8080试试能否访问成功。

apache的编译就这样OK了。

2015-12-27