分类: LINUX
2013-11-20 11:22:42
今天准备在CentOS上通过源码安装apache,并开启服务。遇到了很多的问题,接下来就和大家分享一下经验。
一、Apache安装
首先确定系统上是否装有yum软件包管理器(一般安装系统时会自动安装)
登陆到Apache官网下载相应的软件包:
apache httpd源码包:
apache apr源码包:
apache apr-util源码包:
先解压apache apr源码包
#tar -jxvf apr-1.4.8.tar.bz2
#cd apr-1.4.8
#./configure --prefix=/usr/local/apr (/usr/local/apr自定义路径,安装apache时需要配置的路径)
#make //编译
#make install
再解压apache apr-util源码包
#tar -jxvf apr-util-1.5.2.tar.bz2
#cd apr-util-1.5.2
#./configure --prefix=/usr/local/apr
#make //编译
#make install
注:安装过程可能会遇到错误:rm: cannot remove `libtoolT': No such file or directory
如果遇到以上问题,则编辑configure文件,找到$RM "$cfgfile"行,将此行注释掉,重新执行./configure --prefix=/usr/local/apr即可。
以上两个安装完毕后,解压apache源码包
#tar -jxvf httpd-2.4.6.tar.bz2
#cd httpd-2.4.6
#./configure -pprefix=/usr/local/apache --enable-track-vars --enable-cgi --enable-so
--enable-mods-shared=most --enable-proxy-balancer=shared
--enable-proxy-httpd=shared --enable-proxy-ajp
--enable-rewrite --wiht-config-file-path=/usr/local/apr(apr安装路径)
执行完以上步骤,可能会提示遇到缺少各种依赖包的问题或依赖包版本过低的问题,我遇到的是缺少pcre包,随即到网上下载,步骤同上进行解压,编译过程。
通过后,再次执行
#./configure -pprefix=/usr/local/apache --enable-track-vars --enable-cgi --enable-so
--enable-mods-shared=most --enable-proxy-balancer=shared
--enable-proxy-httpd=shared --enable-proxy-ajp
--enable-rewrite --wiht-config-file-path=/usr/local/apr(apr安装路径)
--with-config-file-path=/usr/local/pcre(pcre安装路径)
#make
#make install
执行完以上步骤,apache应该已经安装在电脑中。
如果遇到编译错误,可能原因是未安装gcc
#yum install gcc
#yum install gcc-c++
解释第6步中,"="后边编译的含义:--enable-track-vars为启动cookie的get/post等追踪功能差不多编译好了
--enable-cgi支持CGI --enable-so支持DOS模式
--enable-mods-shared=most动态编译大部分模块
--enable-proxy-balancer=shared支持负载均衡功能,动态编译apache的负载均衡模块
--enable-proxy-httpd=shared动态编译httpd代理模块
--enable-proxy-ajp动态编译proxy-ajp模块
--enable-rewrite支持地址重写功能
--wiht-config-file-path=/usr/local/apr需要加载的依赖包安装文件
二、Apache服务启动
首先查看系统中是否已启动自带的apache服务
#ps -ef|grep httpd 结果:root 325 1 0 07:37 ? 00:00:00 /sbin/httpd 此路非我们安装的apache路径
卸载系统自带的apache
#service httpd stop //关闭httpd服务
#rpm -qa|grep httpd //查找与httpd有关的包罗列出来 结果:httpd-2.0.52-25.ent 由于系统版本不同,此处结果不一定相同,我们按由下到上的顺序卸载即可
#rpm -e httpd 卸载httpd-2.0.52-25.ent相关包,-2.0.52-25.ent后面的版本号可以忽略不写
对于实在卸载不掉的依赖包,可以使用#rpm -e httpd ——nodeps强制卸载(如果安装了nodeps包)
#ps -ef|grep httpd //校验是否卸载成功
如果系统里没有apache或者httpd服务,每次启动都要执行 /usr/local/apache/bin/apachectl start 比较麻烦,所以要将服务添加到系统服务中。
将apachectl文件拷贝到/etc/rc.d/init.d 中,然后在/etc/rc.d/rc5.d/下加入链接即可。
#cp /usr/local/apache2/bin/apachectl /etc/init.d/httpd //如果有其他的版本的Apache存在,也可以直接覆盖掉
#ln -s /etc/init.d/httpd /etc/rc.d/rc5.d/S85httpd //建立链接(85的意义后面介绍)
此时Apache就可以自动启动了。
运行chkconfig –list,发现没有linux服务列表中httpd,通过chkconfig –add httpd来添加,但是提示:httpd服务不支持 chkconfig。需要编辑/etc/rc.d/init.d/httpd,添加以下注释信息:
# chkconfig: 345 85 15
# description: Activates/Deactivates Apache Web Server
第一行3个数字参数意义分别为:哪些Linux级别需要启动httpd(3,4,5);启动序号(85);关闭序号(15)。
保存后执行:chkconfig –add httpd,成功添加。
在rc3.d、rc4.d、rc5.d路径中会出现S85httpd的链接文件,其他运行级别路径中会出现K61httpd的链接文件。
运行chkconfig –list,发现linux服务列表中存在httpd,表示添加成功;
运行service httpd start启动服务;
以上动作可能产生错误
httpd:httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
这是apache配置文件内的错误,需要使用本机的IP作为服务地址。找到apache的配置文件(/usr/local/apache/conf/httpd.conf)进行修改,将ServerName改为127.0.0.1,并去掉行注释。
重启服务#service httpd restart。
校验是否启动成功
#ps -ef|grep httpd 结果:daemon 330 325 0 08:22 ? 00:00:00 /usr/local/apache/bin/httpd -k start
启动成功!