Apache 编译安装

来源:互联网 发布:淘宝客服技巧用语 编辑:程序博客网 时间:2024/06/15 20:51
一、安装编译环境
在安装apache之前,我们需要安装编译apache时所需要的相关软件包,如下:
yum -y install gcc gcc++ zlib zlib-devel

二、卸载原有Apache(选)
在源码安装apache之前,我们要先卸载系统中,已经通过rpm包安装的apache。如下:
rpm -qa |grep httpd

rpm -e --nodeps httpd-2.2.15-39.el6.centos.x86_64
rpm -e --nodeps httpd-tools-2.2.15-39.el6.centos.x86_64

三、下载apache源码包
tar xf httpd-2.2.31.tar.gz -C /usr/local/

四、安装apache
安装apache,我们首先要编译,然后进行安装。
我们可以通过configure命令查看编译时的相关帮助,如下:
./configure --help

具体编译如下:
./configure --prefix=/fs/app/httpd --enable-rewrite --enable-so --enable-headers --enable-expires --with-mpm=worker --enable-modules=most --enable-deflate --enable-mods-shared=all --enable-proxy=shared --enable-proxy-balancer=shared

--prefix=/fs/app/httpd 表示指定apache的安装路径,默认安装路径为/usr/local/apache2
--enable-rewrite 提供URL规则的重写更嫩那个,即根据已知的URL地址,转换为其它想要的URL地址
--enable-so 激活apache服务的DSO(Dynamic Shared Objects动态共享目标),即在以后可以以DSO的方式编译安装共享模块,这个模块本身不能以DSO方式编译。
--enable-headers 提供允许对HTTP请求头的控制。
--enable-expires 激活通过配置文件控制HTTP的“Expires:”和“Cache-Control:”头内容,即对网站图片、js、css等内容,提供客户端浏览器缓存的设置。这个是apache调优的一个重要选项之一。
--with-mpm=worker 选择apache mpm的模式为worker模式。为worker模式原理是更多的使用线程来处理请求,所以可以处理更多的并发请求。而系统资源的开销小。基于进程的MPM prefork。如果不指定此参数,默认的模式是prefork进程模式。这个是apache调优的一个重要选项之一。
--enable-deflate 提供对内容的压缩传输编码支持,一般是html、js、css等内容的站点。使用此参数会打打提高传输速度,提升访问者访问的体验。在生产环境中,这是apache调优的一个重要选项之一。
--enable-mods-shared=all apache所有模块进行编译

make
make install
安装没有报错则apache安装完成

对于已经安装好的apache应用,也可以追加编译需要的模块
如果需要其他的proxy模块如mod_proxy_http、mod_proxy_ftp、mod_proxy_ajp,则单独编译进去
运行如下命令进行自动编译、安装、修改httpd.conf文件,激活mod_proxy模块
#/usr/local/apache/bin/apxs -c -i -a mod_proxy.c proxy_util.c
#/usr/local/apache/bin/apxs -c -i -a mod_proxy_http.c
#/usr/local/apache/bin/apxs -c -i -a mod_proxy_ftp.c
#/usr/local/apache/bin/apxs -c -i -a mod_proxy_ajp.c ajp*.c    (这行ajp模式必须要加后面的ajp*.c)
/usr/local/apache/bin/apxs 这个路径是已经安装好的apache路径
mod_proxy_http.c 是下载的待编译安装包里的模块,不是安装好的apache路径,这点须注意区分
说明:
-c 执行编译操作
-i 安装操作,安装一个或多个动态共享对象到服务器的modules目录
-a 自动增加一个LoadModule行道httpd.conf文件,以激活此模块,若此行存在则启用之
-A 与-a类似,但是它增加的LoadModule行钱有井号前缀(#)
-e 需要执行编辑操作,可与-a和-A选项配合使用,与-i操作类似,修改httpd.conf文件,但并不安装此模块

用apxs安装编译模块 mod_proxy时候出现报错
apxs -i -a -c mod_proxy.c

错误信息:
httpd: Syntax error on line 19 of /opt/lamp/apache2/conf/httpd.conf: Cannot load /opt/lamp/apache2/modules/mod_proxy.so into server: /opt/lamp/apache2/modules/mod_proxy.so: undefined symbol: ap_proxy_lb_workers
是需要加上proxy_util.c一起编译:
apxs -i -a -c mod_proxy.c proxy_util.c

重启启动apache生效

五、测试apache
将apache的启动脚本复制到/etc/rc.d/init.d这个目录下,如下:
cp /usr/local/apache2/bin/apachectl /etc/init.d/httpd

其实apache的启动是调用/usr/local/apache2/bin/httpd这个命令,查看该脚本的内容,如下:
cat /etc/init.d/httpd|grep -v ^#|grep -v ^$

六、其它
配置conf/httpd.conf
#修改servername

ServerName 127.0.0.1:80

#修改log输出文件路径,对日志文件进行轮循
ErrorLog "|/fs/app/httpd/bin/rotatelogs /fs/logs/http/error_log_%Y%m%d.log 86400 480"
##/fs/app/httpd/bin/rotatelogs 这里的命令是使用Apache自带的轮循工具rotatelogs来对日志文件进行轮循。rotatelogs基本是按时间或大小来控制日志
CustomLog "|/fs/app/httpd/binrotatelogs /fs/logs/http/access_log_%Y%m%d.log 86400 480" common

报错总结:
在启动apache时有时会报错 
libaprutil-1.so.0 not found
libexpat.so.0 not found
……
可以查看下面的bin/httpd 文件里是否有not found
[root@10-15-127-122 bin]# ldd httpd
linux-vdso.so.1 =>  (0x00007fff15bff000)
libm.so.6 => /lib64/libm.so.6 (0x00007fe8acb77000)
libaprutil-1.so.0 => /fs/app/httpd/lib/libaprutil-1.so.0 (0x00007fe8ac951000)
libexpat.so.0 => /fs/app/httpd/lib/libexpat.so.0 (0x00007fe8ac72a000)
libapr-1.so.0 => /fs/app/httpd/lib/libapr-1.so.0 (0x00007fe8ac4f7000)
librt.so.1 => /lib64/librt.so.1 (0x00007fe8ac2ee000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007fe8ac0b7000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fe8abe9a000)
libc.so.6 => /lib64/libc.so.6 (0x00007fe8abb05000)
/lib64/ld-linux-x86-64.so.2 (0x00007fe8ace01000)
libfreebl3.so => /lib64/libfreebl3.so (0x00007fe8ab902000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fe8ab6fd000)

解决方法:
安装对应的lib包
报 libaprutil-1.so.0 not found
安装  yum install apr-util
libexpat.so.0 not found
安装  yum install libexpat
这里安装的软件版本可能是libexpat.so.1并不是libexpat.so.0  
所以可以做个软链接 ln -s /lib64/libexpat.so.0 /lib64/libexpat.so.1

###其它的模块出现类似的问题,也可以按照这个思路来解决##

##有时需要在同一个服务器上安装多个apache应用
在使用低于1024的端口时,会报1024端口只能root使用
解决方法:
需要把bin/httpd文件的属组权限设置为root,
还有修改bin/httpd的  HTTPD='/fs/app/httpd/bin/httpd' 行的准确路径