1. 程式人生 > >CentOS6上編譯安裝httpd2.4

CentOS6上編譯安裝httpd2.4

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




寫的比較潦草,如有遺漏錯誤和爭議之處,歡迎大家的批評指正和討論,謝謝。

CentOS6上編譯安裝httpd2.4