Apache编译安装

        Apache也需要到官网下载合适的版本,目前使用较多的版本为2.0或者2.2建议下载2.2版本。Apache官网下载地址 实际上,我们所谓的 apache ,真正的名字叫 httpd 。

1.下载

1
2
[root@localhost mysql]# cd /usr/local/src/
[root@localhost src]# wget http://syslab.comsenz.com/downloads/linux/httpd-2.2.16.tar.gz

2.解压

1
[root@localhost src]# tar zxvf httpd-2.2.16.tar.gz

3.配置编译参数

1
2
3
4
5
6
7
8
9
[root@localhost src]# cd httpd-2.2.16
[root@localhost httpd-2.2.16]# ./configure \
--prefix=/usr/local/apache2 \
--with-included-apr \
--enable-so \
--enable-deflate=shared \
--enable-expires=shared \
--enable-rewrite=shared \
--with-pcre

        --prefix 指定安装到哪里, --enable-so 表示启用DSO 。DSO是Dynamic Shared Objects(动态共享目标)的缩写,它提供了一种在运行时将特殊格式的代码在程序运行需要时,将需要的部分从外存调入内存执行的方法。Apache 支持动态共享模块,也支持静态模块,静态的话,会把需要的目标直接编译进apache的可执行文件中,相比较动态,虽然省去了加载共享模块的步骤,但是也加大了二进制执行文件的空间,变得臃肿。

        --enable-deflate=shared 表示共享的方式编译deflate,后面的参数同理。

        那什么是动态共享,什么是静态? apache 编译安装完成后会生成一个核心的二进制可执行文件叫做 httpd ,这个文件座位核心文件,提供服务时就是它在处理用户的请求,但是有一些功能,比如这里提到的 expires 就是配置静态文件(图片)过期时间的,也就是说图片可以在用户浏览器的临时缓存目录中缓存多久。这些功能是作为 httpd 的一个扩展模块来工作的,那么这种扩展模块有两种存在的方式,一种是直接在编译的时候和 httpd 文件拧到一起,组成一个体积大的文件,这种叫做静态。而另一种方式是,扩展模块作为一个独立的文件存在,只有在使用这个模块时再去调用它,这种叫做动态共享。两种方式中,动态的好处是,核心文件 httpd 比较小,模块随时用随时加载,耗费内存相对较少。而静态的优势是,在服务启动时,会把所有模块加载,用到时很快就执行,效率较高。建议倾向用动态。

        如果出现了这样的错误:

1
error: mod_deflate has been requested but can not be built due to prerequisite failures

        解决办法:

1
yum install -y zlib-devel

        为了避免在make的时候出现错误,所以最好是提前先安装好一些库文件:

1
yum install -y pcre pcre-devel apr apr-devel

4.编译

1
[root@localhost httpd-2.2.16]# make

5.安装

1
[root@localhost httpd-2.2.16]# make install

        以上两个步骤都可以使用 echo $? 来检查是否正确执行,否则需要根据错误提示去解决问题。

1
2
[root@localhost httpd-2.2.16]# echo $?
[root@localhost httpd-2.2.16]# 0

        为 0 则没有问题。