CentOS6.7上編譯安裝Apache2.2和Apache2.4

目錄

一、Apache的工作模式

1、簡介

2、比較

二、CentOS6.x上安裝Apache2.2

(一)rpm安裝apache

(二)編譯安裝apache

1、安裝編譯環境

2、下載解壓依賴包

3、安裝apache

4、測試apache

5、查看apache相關信息

6、配置程序運行環境

7、導出庫文件

8、導出頭文件

9、導出手冊

10、將Apache添加到啓動服務

(三) 編譯安裝Apache2.4

1、編譯安裝apr

2、編譯安裝apr-util

3、安裝需要的依賴包

4、編譯安裝Apache2.4

5、安裝後配置



一、Apache的工作模式

  Apache HTTP服務器被設計爲一個強大的、靈活的能夠在多種平臺以及不同環境下工作的服務器。Apache HTTP服務器被設計爲一個強大的、靈活的能夠在多種平臺以及不同環境下工作的服務器。這種模塊化的設計就叫做“多路處理模塊”(Multi-Processing Modules,MPMs),也叫做工作模式。
  在編譯apache時必須選擇也只能選擇一個MPM,對類UNIX系統,有幾個不同的MPM可供選擇,它們會影響到apache的速度和可伸縮性。


1、簡介

Prefork MPM:

  prefork是Unix平臺上的默認(缺省)MPM,使用多個子進程,每個子進程只有一個線程。每個進程在某個確定的時間只能維持一個連接,效率高,但內存佔用量比較大


  這個多路處理模塊(MPM)實現了一個非線程型的、預派生的web服務器,它的工作方式類似於Apache 1.3。它適合於沒有線程安全庫,需要避免線程兼容性問題的系統。它是要求將每個請求相互獨立的情況下最好的MPM,這樣若一個請求出現問題就不會影響到其他請求。


  這個MPM具有很強的自我調節能力,只需要很少的配置指令調整。最重要的是將MaxClients設置爲一個足夠大的數值以處理潛在的請求高峯,同時又不能太大,以致需要使用的內存超出物理內存的大小。


Worker MPM:

  worker使用多個子進程,每個子進程有多個線程,每個線程在某個確定的時間只能維持一個連接,內存佔用量比較小,適合高流量的http服務器。缺點是假如一個線程崩潰,整個進程就會連同其任何線程一起”死掉”,所以要保證一個程式在運行時必須被系統識別爲”每個線程都是安全的”。


  此多路處理模塊(MPM)使網絡服務器支持混合的多線程多進程。由於使用線程來處理請求,所以可以處理海量請求,而系統資源的開銷小於基於進程的MPM。但是它也使用了多進程,每個進程又有多個線程,以獲得基於進程的MPM的穩定性。


  每個進程可以擁有的線程數量是固定的。服務器會根據負載情況增加或減少進程數量。一個單獨的控制進程(父進程)負責子進程的建立。每個子進程可以建立ThreadsPerChild數量的服務線程和一個監聽線程,該監聽線程監聽接入請求並將其傳遞給服務線程處理和應答。


  不管是Worker模式或是Prefork模式,Apache總是試圖保持一些備用的(spare)或者是空閒的子進程(空閒的服務線程池)用於迎接即將到來的請求。這樣客戶端就不需要在得到服務前等候子進程的產生。


Event MPM:

  以上兩種穩定的MPM方式在非常繁忙的服務器應用下都有些不足。儘管HTTP的Keepalive方式能減少TCP連接數量和網絡負載,但是 Keepalive需要和服務進程或者線程綁定,這就導致一個繁忙的服務器會耗光所有的線程。 Event MPM是解決這個問題的一種新模型,它把服務進程從連接中分離出來。在服務器處理速度很快,同時具有非常高的點擊率時,可用的線程數量就是關鍵的資源限 制,此時Event MPM方式是最有效的。一個以Worker MPM方式工作的繁忙服務器能夠承受每秒好幾萬次的訪問量(例如在大型新聞服務站點的高峯時),而Event MPM可以用來處理更高負載。值得注意的是,Event MPM不能在安全HTTP(HTTPS)訪問下工作。


ITK MPM:

  Linux自身提供了很強的權限系統,最簡單的方法就是使用這個系統實現不同站點之間的權限劃分,但apache所有進程往往都是運行在同一用戶下,這也就是問題的根源,於是有了apache itk,在debian 裏包名叫做apache2-mpm-itk 。和prefork 和 worker 一樣是一個mpm(多路處理器),實際上itk 是基於prefork的,爲每個虛擬主機prefork出來的子進程可以以不同的用戶身份運行。apache UMASK變量設置爲027,對應ftp的Umask 也設置爲027,這樣程序生成或後上傳的文件也只能被本站點所屬用戶修改,只能被同組人查看,實現了隔離的較果。


  這種不是Apache的MPMs,只是Linux某種發行版對Apache的改進。


2、比較

1)prefork和worker模式的比較

  prefork模式使用多個子進程,每個子進程只有一個線程。每個進程在某個確定的時間只能維持一個連接。在大多數平臺上,Prefork MPM在效率上要比Worker MPM要高,但是內存使用大得多。prefork的無線程設計在某些情況下將比worker更有優勢:它可以使用那些沒有處理好線程安全的第三方模塊,並且對於那些線程調試困難的平臺而言,它也更容易調試一些。

 

  worker模式使用多個子進程,每個子進程有多個線程。每個線程在某個確定的時間只能維持一個連接。通常來說,在一個高流量的HTTP服務器上,Worker MPM是個比較好的選擇,因爲Worker MPM的內存使用比Prefork MPM要低得多。但worker MPM也由不完善的地方,如果一個線程崩潰,整個進程就會連同其所有線程一起"死掉".由於線程共享內存空間,所以一個程序在運行時必須被系統識別爲"每個線程都是安全的"。

 

  總的來說,prefork方式速度要稍高於worker,然而它需要的cpu和memory資源也稍多於woker。

 

2)對於Event 模式,apache給出了以下警告:This MPM is experimental, so it may or may not work as expected .

  這種MPM目前處於試驗狀態,他可能不能按照預期的那樣工作。這是httpd2.2版本的情況,在httpd2.4版本後event模式已經很穩定了,可以用於生產環境。

 

小結:

  prefork:多進程模型,每個進程響應一個請求;一個主進程:負責生成n個子進程,子進程也稱爲工作進程,每個子進程處理一個用戶請求;即便沒有用戶請求,也會預先生成多個空閒進程,隨時等待請求到達;最大不會超過1024個;


  worker:多線程模型,每個線程響應一個請求;一個主進程:生成多個子進程,每個子進程負責生個多個線程,每個線程響應一個請求;m進程,n線程:m*n 。


  event:事件驅動模型,每個線程響應n個請求;一個主進程:生成m個子進程,每個進程直接n個請求;m*n 。


httpd-2.2: event爲測試使用

httpd-.24:event可生產使用


二、CentOS6.x上安裝Apache2.2

  環境:CentOS6.7,Minimal安裝。

(一)rpm安裝apache

1、使用yum命令安裝Apache

# yum -y install httpd


2、啓動Apache

# service httpd start


3、設置開機啓動Apache 

# chkconfig --levels 235 httpd on


4、如果在瀏覽器無法瀏覽,請關閉iptables防火牆。

# service iptables stop	//關閉命令
# chkconfig iptables off //永久關閉防火牆
# service iptables status //查看防火牆狀態


5、如果要安裝Apache其它擴展,參考下面命令。

# yum -y install httpd-manual mod_ssl mod_perl mod_auth_mysql


rpm安裝的Apache,默認用的是prefork模式。


Linux系列-編譯安裝Apache - 卓格 - 騏驥一躍

  

圖1 查看rpm安裝的Apache的模式


(二)編譯安裝apache2.2

1、安裝編譯環境。

  查看現有的編譯環境。


wKioL1dZdi6z8Dw4AAUM8BZoXtc171.png

圖2 查看是否安裝編譯環境


  安裝編譯環境:

# yum install "Development tools" "Server Platform Development" -y


2、下載解壓依賴包

  Apache的編譯安裝需要依賴apr(Apache Portable Runtime )和apr-util,因此需要先安裝此兩個依賴包。Apache2.2版本需要apr/apr-util 1.2以上版本,Apache2.4版本需要apr/apr-utli 1.4以上版本。


  CentOS6.7在安裝編譯環境時已經安裝了apr-1.3.9和apr-util-1.3.9,所以在CentOS6.7上安裝Apache2.2版本,不需要再安裝apr和apr-util。如果在CentOS6.7上編譯安裝Apache2.4版本,則需要下載apr/apr-utli 1.4以上版本。查找及下載方法見下。


(1)查找源碼包


Linux系列-編譯安裝Apache - 卓格 - 騏驥一躍

圖3 查找並獲取源碼包下載地址


(2)下載源碼包。


Linux系列-編譯安裝Apache - 卓格 - 騏驥一躍

圖4 下載源碼包


(3)解壓安裝依賴包

 

安裝apr。

# tar -xf apr-1.5.2.tar.bz2
# cd apr-1.5.2
# ./configure --prefix=/usr/local/apr
# make && make install


安裝apr-util。

# tar -xf apr-util-1.5.4.tar.bz2
# cd apr-util-1.5.4
# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
# make && make install


(4)安裝其它依賴包

  如果編譯安裝Apache時要用到pcre,則需要pcre-devel依賴包。

# yum install pcre-devel -y


  其它額外功能需要依賴包,按照上述方法安裝即可。


3、安裝Apache源碼包

# wget http://mirrors.hust.edu.cn/apache//httpd/httpd-2.2.31.tar.bz2
# tar -xf httpd-2.2.31.tar.bz2
# cd httpd-2.2.31
# ./configure --prefix=/usr/local/apache22 --sysconfdir=/usr/local/httpd22 \
 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util \
 --with-zlib --with-pcre --with-mpm=prefork --enable-so --enable-ssl \
 --enable-cgi --enable-rewrite --enable-modules=most --enable-mpms-shared=all
# make -j 4 && make install


4、測試Apache

(1)測試主配置文件語法

# cd /usr/local/apache22
# bin/apache22/bin/apachectl -t


wKioL1dZdMiz0rOKAAJThZVOEWI769.png

圖5 測試主配置文件語法


  測試Apache主配置文件httpd.conf是否有語法錯誤,出現”Syntax OK“表示配置文件無問題。

 

(2)查看監聽端口

# netstat -tan


Linux系列-編譯安裝Apache - 卓格 - 騏驥一躍 圖6 查看監聽端口


(3)關閉防火牆

 

  apache啓動完畢後,我們來查看下是否可訪問。


Linux系列-編譯安裝Apache - 卓格 - 騏驥一躍圖7 wget測試網頁


  還可以嘗試用瀏覽器訪問http://192.168.163.12,如果無法訪問,關閉防火牆。


wKiom1dZdZLAHlVqAAHNoxu2SCc833.png

 

圖8 關閉防火牆


5、查看Apache相關信息


Linux系列-編譯安裝Apache - 卓格 - 騏驥一躍

圖9 查看Apache相關信息


6、配置程序運行環境

 

  每次用httpd或者apachectl程序時,都要在前面輸入一大段路徑,非常不方便。用”echo $PATH“查看環境變量時,”/usr/local/apache22/bin“路徑沒有配置在環境變量中。將此路徑添加到PATH環境變量中,以後調用httpd/apachectl就不需要輸入路徑了。


Linux系列-編譯安裝Apache - 卓格 - 騏驥一躍

 

圖10 配置程序運行環境


  這種方式的export只對當前shell有效,要想永久有效,執行以下步驟。

(1)編輯生成文件

# vim /etc/profile.d/httpd.sh

  在此文件中寫入"export PATH=/usr/local/apache22/bin:$PATH",保存退出。


(2)執行

# source /etc/profile.d/httpd.sh

  或者

# . /etc/profile.d/httpd.sh


Linux系列-編譯安裝Apache - 卓格 - 騏驥一躍

 

圖11 導入路徑到環境變量



7、導入庫文件

  一般應用程序運行都依賴於標準庫裏面的文件,Linux系統會在特定路徑下爲應用查找所依賴的庫文件:/lib64, /lib, /usr/lib64, /usr/lib, /usr/lib, /usr/lib64, /usr/local/lib, /usr/local/lib64 。某些應用程序需要的庫文件標準庫中沒有,那麼就需要添加應用程序自身提供的庫文件到系統搜索路徑中。那麼就要添加修改配置文件,讓系統搜索到此庫文件。


添加步驟:

  (1) 編輯添加/etc/ld.so.conf.d/*.conf文件,*表示的文件名自己取。添加新庫文件搜索路徑至此文件中,每行一個。

  (2) 執行ldconfig命令,重新生成庫映射緩存ld.so.conf 。


wKiom1doplviD331ABbbjNbE9Bo344.png

 圖12 導入庫文件


ldconfig命令用法看手冊

# man ldconfig


8、導出頭文件

方法一:

  複製所有新生成的頭文件(/usr/local/apache22/include目錄下的所有文件)至/usr/include目錄中(不推薦);

# cp /usr/local/apache22/include/* /usr/include/


方法二:創建鏈接

  連接源目錄到目標文件

# ln -sv /usr/local/apache22/include /usr/include/httpd

  或者連接源文件到目標目錄中

# ln -sv /usr/local/apache22/include/* /usr/include/


9、導出手冊

  Linux會到特定目錄下查找用戶需要使用命令的手冊,系統是依據“/etc/man.config”配置文件中“MANPATH”指令指向的手冊路徑搜索的。要讓讓系統能夠搜索到apache手冊路徑,我們就需要編輯此配置文件。


  在此文件新增MANPATH指令,並指向新的命令手冊路徑;


  或者,在man命令執行時使用-M選項顯式指定手冊而查找路徑即可;


2016年06月03日 - 卓格 - 騏驥一躍

 圖13 導出手冊


10、將Apache添加到啓動服務

(1)修改httpd的主配置文件,設置其Pid文件的路徑。

  編輯/etc/httpd/httpd.conf,添加如下行即可:

PidFile  "/var/run/httpd.pid"


(2)提供SysV服務腳本/etc/rc.d/init.d/httpd,內容如下:

#!/bin/bash
#
# httpd        Startup script for the Apache HTTP Server
#
# chkconfig: - 85 15
# description: Apache is a World Wide Web server.  It is used to serve \
#        HTML files and CGI.
# processname: httpd
# config: /etc/httpd/conf/httpd.conf
# config: /etc/sysconfig/httpd
# pidfile: /var/run/httpd.pid

# Source function library.
. /etc/rc.d/init.d/functions

if [ -/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/apache22/bin/apachectl
httpd=${HTTPD-/usr/local/apache22/bin/httpd}
prog=httpd
pidfile=${PIDFILE-/var/run/httpd22.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd22}

RETVAL=0

start() {
       echo -n $"Starting $prog: "
       LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
       RETVAL=$?
       echo
       [ $RETVAL = 0 ] && touch ${lockfile}
       return $RETVAL
}

stop() {
 echo -n $"Stopping $prog: "
 killproc -p ${pidfile} -10 $httpd
 RETVAL=$?
 echo
 [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}
reload() {
   echo -n $"Reloading $prog: "
   if ! LANG=$HTTPD_LANG $httpd $OPTIONS ->&/dev/null; then
       RETVAL=$?
       echo $"not reloading due to configuration syntax error"
       failure $"not reloading $httpd due to configuration syntax error"
   else
       killproc -p ${pidfile} $httpd -HUP
       RETVAL=$?
   fi
   echo
}

# See how we were called.
case "$1" in
 start)
 start
 ;;
 stop)
 stop
 ;;
 status)
       status -p ${pidfile} $httpd
 RETVAL=$?
 ;;
 restart)
 stop
 start
 ;;
 condrestart)
 if [ -f ${pidfile} ] ; then
   stop
   start
 fi
 ;;
 reload)
       reload
 ;;
 graceful|help|configtest|fullstatus)
 $apachectl $@
 RETVAL=$?
 ;;
 *)
 echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}"
 exit 1
esac

exit $RETVAL

將標記的地方改爲你的apache路徑。


(3)而後爲此腳本賦予執行權限:

# chmod +x /etc/rc.d/init.d/httpd


(4)加入服務列表:

# chkconfig --list
# chkconfig --add httpd
# chkconfig --list | grep httpd


這個時候輸出的結果:

httpd           0:off   1:off   2:off   3:off   4:off   5:off   6:off


  此時0~6均爲off,則說明httpd服務不會在系統啓動的時候自動啓動。我們輸入chkconfig httpd on後,再次檢查輸出結果變爲:

httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off

  這個時候2~5都是on,就表明會自動啓動了。


  接下來就可以啓動服務進行測試了。


(三)編譯安裝Apache2.4

   Apache2.4依賴apr/apr-util 1.4及以上版本,所以在CentOS6.7上安裝Apache2.4,要升級或安裝較新的apr/apr-util版本。安裝步驟參看前面。

 

1、編譯安裝apr

# ./configure --prefix=/usr/local/apr
# make && make install


2、編譯安裝apr-util

# ./configure --prefix=/usr/local/apr-util --with=/usr/local/apr
# make && make install


3、安裝需要的依賴包

  前面安裝編譯環境不會自動安裝的開發組件,需要手工安裝下。

# yum install pcre-devel -y


4、編譯安裝Apache2.4

  編譯安裝前,卸載已安裝的rpm安裝包。

# yum remove httpd


  卸載以前編譯安裝的Apache2.2。

# rm -rf /usr/local/apache22
# rm -rf /usr/local/src/apache-2.2.31


  路徑導出文件、庫導出文件、頭文件導出文件、手冊導出文件等可以刪除,也可以等編譯安裝完Apache2.4後直接修改。

開始編譯安裝Apache2.4

# groupadd -r apache
# useradd -r -g apache apahce
# ./configure --prefix=/usr/local/apache24 \
 --enable-modules=most \
 --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-mpms-shared=all \
 --with-mpm=prefork
# make -j 4 && make install


5、安裝後配置

  編譯安裝完畢後,導出二進制路徑、導出庫文件、導出頭文件、導出手冊和添加啓動服務等設置,與編譯安裝Apache2.2一樣,只是把對應的路徑改爲Apache2.4的路徑。


卓格  完成於家

2016年5月29日 初稿

2016年6月9日 20:55:15 更新。圖片添加註釋說明。


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