apr-1.4及以上版本
apr-util-1.4及以上版本
而直接升级apr和apr-util会覆盖直接版本的程序,影响其他程序的依赖关系,所以一般使用编译安装的方式安装apr和apr-util,然后编译安装httpd2.4。
具体步骤如下:
1、准备安装环境和源码包
[root@localhost ~] # yum groupinstall "Development Tools" "Server Platform Development" -y [root@localhost ~] # yum install pcre-devel -y
下载源码包,这里我用到的是:
apr-1.5.0.tar.bz2
apr-util-1.5.3.tar.bz2
httpd.2.4.9.tar.bz2
2、编译安装apr和apr-util
[root@localhost ~] # tar xf apr-1.5.0.tar.bz2 [root@localhost ~] # cd apr-1.5.0 [root@localhost apr-1.5.0 ] # ./configure --prefix=/usr/local/apr // 为避免影响原有版本apr,将新版本apr安装到新的目录/usr/local/apr,--prefix选项为指定安装 目录 [root@localhost apr-1.5.0 ] # make && make install [root@localhost ~] # tar xf apr-util-1.5.3.tar.bz2 [root@localhost ~] # cd apr-util-1.5.3 [root@localhost apr-util-1.5.3] # ./configure --prefix=/usr/local/apr-util --with-apr=/usr /local/apr // 同样将apr-util安装到新的目录,--with-apr指定apr所在目录 [root@localhost apr-util-1.5.3 ] # make && make install
3、编译安装httpd2.4
[root@localhost ~] # tar xf httpd-2.4.9.tar.bz2 [root@localhost ~] # cd httpd-2.4.9 [root@localhost httpd-2.4.9 ] # ./configure --prefix=/usr/local/apache --sysconf=/etc/http d24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with- apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mpms -shared =all --with-mpm=prefork // --prefix=/usr/local/apache :安装位置 // -sysconf=/etc/httpd24 :配置文件位置 // --enable-so :支持DSO动态装载模块 // --enable-ssl :支持SSL/TLS,可实现https协议访问,需要安装openssl-devel // --enable-cgi :支持CGI脚本 // --enable-rewrite :支持URL重写 // --with-zlib :使用指定的zlib压缩库,不指定路径会自动寻找 // --with-pcre :使用指定的pcre库,增强的正则表达式分析工具;不指定路径会自动寻找,需要安装 pcre-devel // --with-apr=/usr/local/apr :指定依赖的apr程序安装位置 // --with-apr-util=/usr/local/apr-util :指定依赖的apr-util程序安装位置 // --enable-modules=most :支持动态启用模块:all:所有;most:常用 // --enable-mpms-shared=all :编译并共享的模块 // --with-mpm=event :默认启用的mpm模块;可选项有prefork|worker|event [root@localhost httpd-2.4.9 ] # make && make install
4、安装后配置
(1)添加环境变量,并重读文件
因为是编译安装的httpd,所以PATH环境变量里并没有我们所安装的目录,需要手动添加
[root@localhost ~] # vim /etc/profile.d/httpd24.sh export PATH=/usr/local/apache/bin:$PATH [root@localhost ~] # source /etc/profile.d/httpd24.sh
添加完成后,执行httpd命令时,就可以正常使用,如果不添加到环境变量,则需要在绝对路径下使用,十分不便。
(2)导出头文件
[root@localhost ~] # ln -sv /usr/local/apache/include /usr/include/httpd
不需要复制,创建软链接即可
(3)导出man手册
[root@localhost ~] # vim /etc/man.confg
(4)编写服务脚本
[root@localhost ~]# vim /etc/rc.d/init.d/httpd
				#!/bin/bash
				#
				# httpd        Startup script for the Apache HTTP Server
				#
				# chkconfig: - 85 15
				# description: The Apache HTTP Server is an efficient and extensible  				#	       server implementing the current HTTP standards.
				# processname: httpd
				# config: /etc/httpd/conf/httpd.conf
				# config: /etc/sysconfig/httpd
				# pidfile: /var/run/httpd/httpd.pid
				#
				### BEGIN INIT INFO
				# Provides: httpd
				# Required-Start: $local_fs $remote_fs $network $named
				# Required-Stop: $local_fs $remote_fs $network
				# Should-Start: distcache
				# Short-Description: start and stop Apache HTTP Server
				# Description: The Apache HTTP Server is an extensible server 
				#  implementing the current HTTP standards.
				### END INIT INFO
				# Source function library.
				. /etc/rc.d/init.d/functions
				if [ -f /etc/sysconfig/httpd ]; then
				        . /etc/sysconfig/httpd
				fi
				# Start httpd in the C locale by default.
				HTTPD_LANG=${HTTPD_LANG-"C"}
				# This will prevent initlog from swallowing up a pass-phrase prompt if
				# mod_ssl needs a pass-phrase from the user.
				INITLOG_ARGS=""
				# Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server
				# with the thread-based "worker" MPM; BE WARNED that some modules may not
				# work correctly with a thread-based MPM; notably PHP will refuse to start.
				# Path to the apachectl script, server binary, and short-form for messages.
				apachectl=/usr/local/apache/bin/apachectl
				httpd=${HTTPD-/usr/sbin/httpd}
				prog=httpd
				pidfile=${PIDFILE-/var/run/httpd/httpd24.pid}
				lockfile=${LOCKFILE-/var/lock/subsys/httpd24}
				RETVAL=0
				STOP_TIMEOUT=${STOP_TIMEOUT-10}
				# The semantics of these two functions differ from the way apachectl does
				# things -- attempting to start while running is a failure, and shutdown
				# when not running is also a failure.  So we just do it the way init scripts
				# are expected to behave here.
				start() {
				        echo -n $"Starting $prog: "
				        LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
				        RETVAL=$?
				        echo
				        [ $RETVAL = 0 ] && touch ${lockfile}
				        return $RETVAL
				}
				# When stopping httpd, a delay (of default 10 second) is required
				# before SIGKILLing the httpd parent; this gives enough time for the
				# httpd parent to SIGKILL any errant children.
				stop() {
					status -p ${pidfile} $httpd > /dev/null
					if [[ $? = 0 ]]; then
						echo -n $"Stopping $prog: "
						killproc -p ${pidfile} -d ${STOP_TIMEOUT} $httpd
					else
						echo -n $"Stopping $prog: "
						success
					fi
					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
				}
				# See how we were called.
				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=2
				esac
				exit $RETVA编写完服务脚本后,需要将服务脚本设为开机启动
[root@localhost ~]# chkconfig --add httpd [root@localhost ~]# chkconfig httpd on
写的比较潦草,如有遗漏错误和争议之处,欢迎大家的批评指正和讨论,谢谢。
原文:http://blog.51cto.com/11367661/2047998