一、httpd-2.4的新特性

1)MPM支持在运行时装载;

    --enable-mpms-shared=all --with-mpm={prefork|worker|event}

2)支持event mpm

3)异步读写

4)在每模块及每目录分别使用不同的日志级别

5)每请求的配置;<If>,<Elseif>

6)增强版的表达式分析器

7)毫秒级的keep alive的timeout

8)基于FQDN的虚拟主机不再需要NameVirtualHost指令;

9)支持用户使用自定义变量

10)新增了一些模块:mod_proxy_fcgi, mode_ratelimit, mod_request, mod_remoteip

11)修改了一些配置机制。不再支持使用order, allow, deny定义基于ip的访问控制,改为require

二、安装配置开始

1、解决依赖关系    

安装 apr    

[root@server ~]# cd apr-1.5.0     [root@server apr-1.5.0]# ./configure --prefix=/usr/local/apr     [root@server apr-1.5.0]# make && make install

安装 apr-util    

[root@server ~]# tar  xf apr-util-1.5.3.tar.bz2     [root@server ~]# cd apr-util-1.5.3     [root@server apr-util-1.5.3]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/     [root@server apr-util-1.5.3]#  make && make install

安装其他依赖关系,使用yum 就可以解决。这一过程可在安装httpd时候根据提示具体解决。

2、安装 http 2.4.9    

[root@server ~]# tar xf httpd-2.4.9.tar.bz2     [root@server ~]# cd httpd-2.4.9     [root@server httpd-2.4.9]# ./configure --prefix=/usr/local/apache24 --sysconfdir=/etc/httpd24 --enable-modules=most --enable-so  --enable-deflate --enable-ssl --enable-cgi --enable-rewrite  --with-apr=/usr/local/apr/ --with-apr-util=/usr/local/apr-util/ --with-mpm=event  --enable-mpms-shared=all# --prefix 指明安装目录# --sysconfdir 指明配置文件目录# --enable-modules=most 启用大多数的模块# --enable-so 允许动态加载模块# --enable-deflate 允许使用压缩传输# --enable-ssl  允许使用 SSL# --enable-cgi 允许使用CGI# --enable-rewrite 允许使用重写# --with-apr --with-apr-util 指明 apr 和apr-util安装目录# --with-mpm=event MPM为event# --enable-mpms-shared=all 将所有的 MPM 编译从动态模块 #########################构建MPM为静态模块#################################在全部平台中,MPM都可以构建为静态模块。在构建时选择一种MPM,链接到服务器中。如果要改变MPM,必须重新构建。为了使用指定的MPM,请在执行configure脚本时,使用参数 --with-mpm=NAME。NAME是指定的MPM名称。编译完成后,可以使用 ./httpd -l 来确定选择的MPM。 此命令会列出编译到服务器程序中的所有模块,包括 MPM。#########################构建 MPM 为动态模块############################在Unix或类似平台中,MPM可以构建为动态模块,与其它动态模块一样在运行时加载。 构建 MPM 为动态模块允许通过修改LoadModule指令内容来改变MPM,而不用重新构建服务器程序。在执行configure脚本时,使用--enable-mpms-shared选项即可启用此特性。当给出的参数为all时,所有此平台支持的MPM模块都会被安装。还可以在参数中给出模块列表。默认MPM,可以自动选择或者在执行configure脚本时通过--with-mpm选项来指定,然后出现在生成的服务器配置文件中。编辑LoadModule指令内容可以选择不同的MPM。[root@server httpd-2.4.9]# make && make install

3、导出二进制文件和帮助手册    

vim /etc/profile.d/apache.sh   PATH=/usr/local/apache24/bin:$PATH     . /etc/profile.d/apache.shvim /etc/man.config    MANPATH /usr/local/apache24/man

4、提供服控制动脚本:    

[root@server httpd24]# cat /etc/init.d/httpd24     #!/bin/bash     #     # httpd24        Startup script for the Apache HTTP Server     #     # chkconfig: - 85 15# Source function library.    . /etc/rc.d/init.d/functionsHTTPD_LANG=${HTTPD_LANG-"C"}    INITLOG_ARGS=""     apachectl=/usr/local/apache24/bin/apachectl     httpd=${HTTPD-/usr/local/apache24/bin/httpd}    prog=httpd     pidfile=${PIDFILE-/usr/local/apache24/logs/httpd.pid}     lockfile=${LOCKFILE-/var/lock/subsys/httpd}     RETVAL=0    STOP_TIMEOUT=${STOP_TIMEOUT-10}start() {        echo -n $"Starting $prog: "        LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS        RETVAL=$?        echo        [ $RETVAL = 0 ] && touch ${lockfile}        return $RETVAL}stop() {	echo -n $"Stopping $prog: "	killproc -p ${pidfile} -d ${STOP_TIMEOUT} $httpd	RETVAL=$?	echo	[ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}}reload() {    echo -n $"Reloading $prog: "    if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then        RETVAL=6        echo $"not reloading due to configuration syntax error"        failure $"not reloading $httpd due to configuration syntax error"    else        # Force LSB behaviour from killproc        LSB=1 killproc -p ${pidfile} $httpd -HUP        RETVAL=$?        if [ $RETVAL -eq 7 ]; then            failure $"httpd shutdown"        fi    fi    echo}case "$1" in  start)	start	;;  stop)	stop	;;  status)        status -p ${pidfile} $httpd	RETVAL=$?	;;  restart)	stop	start	;;  condrestart|try-restart)	if status -p ${pidfile} $httpd >&/dev/null; then		stop		start	fi	;;  force-reload|reload)        reload	;;  graceful|help|configtest|fullstatus)	$apachectl $@	RETVAL=$?	;;  *)	echo $"Usage: $prog {start|stop|restart|condrestart|try-restart|force-reload|reload|status|fullstatus|graceful|help|configtest}"	RETVAL=2esacexit $RETVAL

5、虚拟主机 和 SSL 的实现 

虚拟主机:

vim /etc/http24/http.conf:注释:DocumentRoot "/usr/local/apache24/htdocs"    开启:Include "extra/httpd-vhosts.conf"vim /etc/http24/extra/httpd-vhosts.conf
        ServerAdmin webmaster@guoting.com         DocumentRoot "/web/vhosts/www1"         ServerName www1.guoting.com         
             Require all granted                  ErrorLog "logs/www1.guoting.com.error_log"         CustomLog "logs/www1.guoting.com.access_log" common     
        ServerAdmin webmaster2@guoting.com         DocumentRoot "/web/vhosts/www2"         ServerName www2.guoting.com         
             Require all granted                  ErrorLog "logs/www2.guoting.com.error_log"         CustomLog "logs/www2.guoting.com.access_log" common     

在上一步的基础上实现ssl:     

##########################加载模块读取配置文件############################   vim /etc/http24/http.conf开启:Include "extra/httpd-ssl.conf"    LoadModule socache_shmcb_module modules/mod_socache_shmcb.so     LoadModule ssl_module modules/mod_ssl.so当然可以动态添加 MPM 的方式:(选择添加)    LoadModule mpm_event_module modules/mod_mpm_event.so##############################制作证书#######################################  在服务端:     (umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)     openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 1000     touch index.txt     echo "01" > serial在客户端:    (umask 077;openssl genrsa -out /etc/httpd24/httpd.key 2048)     openssl req -new -key /etc/httpd24/httpd.key -out /etc/httpd24/httpd.csr     将 httpd.csr 传到服务端签名:在服务端:    openssl ca -in /root/httpd.csr -out /root/httpd.crt -days 1000     将签好的证书,httpd.crt 传回到客户端,放到 etc/httpd24/ 目录下#############################修改配置文件#############################vim /etc/http24/extra/httpd-ssl.conf# 添加:    
         DocumentRoot "/web/vhosts/www1"         
             Options none             Require all granted                  ServerName www1.guoting.com:443         ServerAdmin root@guoting.com         ErrorLog "/web/vhosts/www1/logs/error_log"         TransferLog "/web/vhosts/www1/logs/access_log"         SSLEngine on         SSLCertificateFile "/etc/httpd24/httpd.crt"         SSLCertificateKeyFile "/etc/httpd24/httpd.key"       
        DocumentRoot "/web/vhosts/www2"         
             Options none             Require all granted                  ServerName www2.guoting.com:443         ServerAdmin root@guoting.com         ErrorLog "/web/vhosts/www2/logs/error_log"         TransferLog "/web/vhosts/www2/logs/access_log"         SSLEngine on         SSLCertificateFile "/etc/httpd24/httpd.crt"         SSLCertificateKeyFile "/etc/httpd24/httpd.key"     #######################创建日志目录############################    mkdir /web/vhosts/www1/logs -p     mkdir /web/vhosts/www2/logs -p###################测试###################################在浏览器中输入测试,以 Linux 为例:输入:https://www1.guoting.com,导入证书即可访问。