这个话题似乎太简单太俗了,因为大凡做过系统维护的读者谁不知道怎么安装Apache呢。所以,笔者在这里不打算去谈大家都十分熟悉而且十分简单的内容。我们来谈谈Apache的配置文件httpd.conf,Apache的启动脚本及自动化的安装脚本。
一.Apache配置文件
   不知道大家有没有这样的感觉,打开httpd.conf文件后,发现里面的注释太多了,多得让你想在里面查找个东西都要费不少的劲。实践中,为了避免去折腾这个httpd.conf文件,往往是不去管它,而是去另外一个文件里面干活:

$ APACHE_HOME/conf/extra/httpd_vhost.conf。
这样虽然在一定程度上方便了操作,可是终归有必须“拜访”httpd.conf的时候,而且,杂乱无章的httpd.conf文件也不符合安全的要求。所以,insecure.org上有文章就指出,httpd.conf文件应该从头自己写。笔者赞同这个提法,实践中总是用自己从头写的httpd.conf。
自己 从头写的配置文件,简明扼要,方便操作,看起来就给人一种很清爽的感觉。笔者的httpd.conf文件涉及的知识点可以满足一个中型网站的要求了,比如MPM参数设置,用户跟踪,图片请求日志处理,防恶意访问,防盗链等。在附件里给出。

二.Apache的启动脚本
    Apache的启动脚本$APACHE_HOME/bin/apachectl用起来确实方便,不过笔者看来,它还不是十分方便。我们希望他能放到/etc/init.d/下面去,在系统启动时,自动启动Apache。而且,在平常维护的时候,也不需要去关注Apache到底安装在哪里的,只要执行/etc/init.d/目录下的该脚本,就搞定了(永远都不要奢望监控人员会熟悉你的系统)。所以,笔者对其做了修改,使其能完成这个任务。修改后内容如下:
[root@bj-web1 bin]# cat /etc/init.d/apache
#!/bin/sh
#
# chkconfig: 345 90  19
# description: startup script for apache
# processname: httpd
ARGV="$@"
APACHE_HOME=/usr/local/apache2
HTTPD="$APACHE_HOME/bin/httpd"
if test -f $APACHE_HOME/bin/envvars; then
  . $APACHE_HOME/bin/envvars
fi
LYNX="links -dump"
STATUSURL="http://localhost:80/server-status"
ULIMIT_MAX_FILES="ulimit -S -n `ulimit -H -n`"

if [ "x$ULIMIT_MAX_FILES" != "x" ] ; then
    $ULIMIT_MAX_FILES
fi

ERROR=0
if [ "x$ARGV" = "x" ] ; then 
    ARGV="-h"
fi

case $ARGV in
start|stop|restart|graceful|graceful-stop)
    $HTTPD -k $ARGV
    ERROR=$?
    ;;
configtest)
    $HTTPD -t
    ERROR=$?
    ;;
status)
    $LYNX $STATUSURL | awk ' /process$/ { print; exit } { print } '
    ;;
fullstatus)
    $LYNX $STATUSURL
    ;;
*)
    $HTTPD $ARGV
    ERROR=$?
esac

exit $ERROR

[root@bj-web1 bin]# ll /etc/init.d/apache
-rwxr-xr-x  1 root root 1014  1月  2 16:01 /etc/init.d/apache
[root@bj-web1 bin]# chkconfig --list | grep apache
apache          0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭


三.Apache自动安装脚本
    安装过Apache的读者就知道,即使在DELL 2850上装Apache,也要几分钟时间,而且,如果手工安装的话,还容易导致每次安装出来的Apache都不一样,这样的系统是很难维护的。所以,笔者实践中都是用脚本安装。下面是笔者使用的安装脚本:
root@bj-web1 bin]# cat install_apache.sh
#!/bin/bash
#file name: install_apache.sh

CUR_DIR=`pwd`
APACHE_HOME=/usr/local/apache2

#----------------------------
tar -jxvf httpd-2.2.4.tar.bz2
cd httpd-2.2.4
#----------------------------
./configure \
--prefix=$APACHE_HOME\
--disable-actions \
--disable-asis \
--disable-autoindex \
--disable-cgi \
--disable-cgid \
--disable-charset-lite \
--disable-imagemap \
--disable-include \
--disable-negotiation \
--disable-userdir \
--enable-cache \
--enable-deflate \
--enable-disk-cache \
--enable-expires \
--enable-file-cache \
--enable-headers \
--enable-http \
--enable-logio \
--enable-mem-cache \
--enable-mime-magic \
--enable-proxy \
--enable-proxy-http \
--enable-proxy-balancer \
--enable-rewrite \
--enable-so \
--enable-status \
--enable-usertrack \
--with-mpm=worker \
--with-included-apr 

make && make install

rm -rf $APACHE_HOME/cgi_bin
rm -rf $APACHE_HOME/manual
rm -rf $APACHE_HOME/htdocs/*

install $CUR_DIR/apache.conf $APACHE_HOME/conf/httpd.conf 
install $CUR_DIR/apache.sh /etc/init.d/apache
chkconfig apache on
/etc/init.d/apache start

到此为止,我们说了Apache安装过程中的三个文件,httpd.conf, apache.sh和install_apache.sh。那么,实际安装过程中,应该把这三个文件放到什么位置呢?笔者常用的刀法是这样:
[root@bj-web1 bin]# cd /usr/local/src
[root@bj-web1 src]# ll
-rw-r--r--   1 root  root      4864  1月  2 15:42 apache.conf
-rw-r--r--   1 root  root       995  1月  2 15:46 apache.sh
-rw-r--r--   1 root  root   4930375 2007-01-06  httpd-2.2.4.tar.bz2
-rw-r--r--   1 root  root      1035  1月  2 15:53 install_apache2.sh
[root@bj-web1 src]# sh install_apache2.sh

几分钟后,一个全新的Apache就装好了。