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/httpd24 --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.shexport 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/functionsif [ -f /etc/sysconfig/httpd ]; then . /etc/sysconfig/httpdfi# 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/apachectlhttpd=${HTTPD-/usr/sbin/httpd}prog=httpdpidfile=${PIDFILE-/var/run/httpd/httpd24.pid}lockfile=${LOCKFILE-/var/lock/subsys/httpd24}RETVAL=0STOP_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/nullif [[ $? = 0 ]]; thenecho -n $"Stopping $prog: "killproc -p ${pidfile} -d ${STOP_TIMEOUT} $httpdelseecho -n $"Stopping $prog: "successfiRETVAL=$?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} $httpdRETVAL=$?;; restart)stopstart;; condrestart|try-restart)if status -p ${pidfile} $httpd >&/dev/null; thenstopstartfi;; 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 $RETVA
编写完服务脚本后,需要将服务脚本设为开机启动
[root@localhost ~]# chkconfig --add httpd[root@localhost ~]# chkconfig httpd on
写的比较潦草,如有遗漏错误和争议之处,欢迎大家的批评指正和讨论,谢谢。
CentOS6上编译安装httpd2.4
原文地址:http://blog.51cto.com/11367661/2047998