在CentOS6上沒法直接使用rpm包安裝httpd2.4,由於httpd2.4依賴於:正則表達式
apr-1.4及以上版本
apache
apr-util-1.4及以上版本vim
而直接升級apr和apr-util會覆蓋直接版本的程序,影響其餘程序的依賴關係,因此通常使用編譯安裝的方式安裝apr和apr-util,而後編譯安裝httpd2.4。bash
具體步驟以下:ide
一、準備安裝環境和源碼包工具
[root@localhost ~] # yum groupinstall "Development Tools" "Server Platform Development" -y [root@localhost ~] # yum install pcre-devel -y
下載源碼包,這裏我用到的是:ui
apr-1.5.0.tar.bz2this
apr-util-1.5.3.tar.bz2spa
httpd.2.4.9.tar.bz2rest
二、編譯安裝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
三、編譯安裝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
四、安裝後配置
(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
寫的比較潦草,若有遺漏錯誤和爭議之處,歡迎你們的批評指正和討論,謝謝。