CentOS6上编译安装httpd2.4

在CentOS6上无法直接使用rpm包安装httpd2.4,因为httpd2.4依赖于:

  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




写的比较潦草,如有遗漏错误和争议之处,欢迎大家的批评指正和讨论,谢谢。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章