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

centos6.7上如何編譯安裝Apache2.2和Apache2.4

目錄

一、Apache的工作模式

1、簡介

2、比較

二、CentOS6.x上安裝Apache

(一)rpm安裝apache

(二)編譯安裝apache2.2

1、安裝編譯環境

2、下載解壓依賴包

3、安裝apache2.2

4、測試apache2.2

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平臺上的默認(缺?。㎝PM,使用多個子進程,每個子進程只有一個線程。每個進程在某個確定的時間只能維持一個連接,效率高,但內存占用量比較大。


這個多路處理模塊(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模式。


01查看rpm安裝的Apache的模式.png

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


(二)編譯安裝apache2.2

1、安裝編譯環境。

查看現有的編譯環境。

02查看編譯環境.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)查找源碼包

03查找并獲取源碼包下載地址.png

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

(2)下載源碼包。

04下載源碼包.png

圖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

05測試主配置文件語法.png

圖5 測試主配置文件語法

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

 

(2)查看監聽端口

# netstat -tan

06查看監聽端口.png

圖6 查看監聽端口

(3)關閉防火墻

 

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

07wget測試網頁.png

圖7 wget測試網頁

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

08關閉防火墻.png

圖8 關閉防火墻

5、查看Apache相關信息

09查看Apache相關信息.png

圖9 查看Apache相關信息

6、配置程序運行環境

 

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

10配置程序運行環境.png

圖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

11導入路徑到環境變量.png

圖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 。

12導入庫文件.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選項顯式指定手冊而查找路徑即可;


13導出手冊.png

圖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 [ -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/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} -d 10 $httpd
  RETVAL=$?
  echo
  [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}
reload() {
    echo -n $"Reloading $prog: "
    if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/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 && make install

5、安裝后配置

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


原創文章,作者:Net17-卓格,如若轉載,請注明出處:http://www.www58058.com/16583

(1)
Net17-卓格Net17-卓格
上一篇 2016-05-29
下一篇 2016-05-29

相關推薦

  • CentOS 7 tomcat 7.0.54 的功能實現及詳解

    一、 jdk 安裝配置 # yum install java-1.8.0-openjdk-devel (依賴的java-1.8.0-openjdk,java-1.8.0-openjdk,headless也會被安裝 ) # alternatives -h # vim /e…

    Linux干貨 2014-06-09
  • 馬哥Linux第六周作業

    網絡管理 進程查看及管理之ps,top,htop,dstat,vmstat

    2018-01-20
  • 處理交換文件和分區

    處理交換文件和分區 交換分區是系統RAM的補充 ?  基本設置包括:  1 創建交換分區或者文件  2 使用mkswap寫入特殊簽名  3 在/etc/fstab文件中添加適當的條目  4 使用swapon -a 激活交換空間 掛載交換分區 ? 啟用:swapon swapon [OPTION]……

    Linux干貨 2016-09-01
  • 第一周:Linux基礎之系統入門知識(一)

    一、計算機的組成及功能 現代計算機的基本結構是由匈牙利-美國科學家馮· 諾依曼于1946年提出的。迄今為止所有進入實用的電子計算機  都是按馮· 諾依曼提出的結構體系和工作原理設計制造的故又統稱為“馮·諾依曼型計算機"。 根據馮.諾依曼原理:計算機由運算器、控制器、存儲器、輸入設備、輸出設備所組成 運算器: 進行算術與邏輯運算 控制器:&…

    Linux干貨 2016-09-18
  • N25-第十周博客作業

    1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情) 內核空間的啟動流程 一. POST 加電自檢 在加電之后,智能設備所運行的內部存儲的一系列檢測程序集合??s寫為POST。這些檢測程序在軟件加載到硬件上運行之前對硬件的基本完整性加以驗證。 用于實現POST的代碼在主板上ROM(CMOS)芯片上。 二. Boot Sequence(BI…

    Linux干貨 2017-03-25
  • 計算機編程簡史圖

       這個圖片太經典了,本來想翻譯的,后來覺得這么經典的圖片可能早已被人翻譯了,簡單的Google一下,果然有人翻譯了。那我就把英文版和中文版都轉過來吧。我們可以看到,其中很大一部分人都和Unix有著不解之緣(參見《Unix傳奇上篇,Unix傳奇下篇》) 英文原版 中文翻譯版 什么也不說了,直接上圖(圖片比較大,單擊圖片看大圖) 計算機編…

    Linux干貨 2015-04-02

評論列表(5條)

  • stanley
    stanley 2016-06-03 12:41

    已置頂,寫的好認真,恭喜加入免檢家族

    • Net17-卓格
      Net17-卓格 2016-06-03 13:04

      @stanley謝謝老師的肯定,就是排版太痛苦了。建議下載安裝“css custom”插件,這樣可以自定義樣式。我博客文章都寫好了,復制過來結果全變樣了,不得不再次在wordpress里面重新排版,過程太痛苦了。

    • Net 20-北京自由鳥
      Net 20-北京自由鳥 2016-06-03 14:18

      @Net17-卓格你的文章寫的很好 我想保留 怎么轉載到我的里

    • Net 20-北京自由鳥
      Net 20-北京自由鳥 2016-06-03 14:18

      @Net17-卓格你的文章寫的很好 我想保留 怎么轉載到我的里

    • Net17-卓格
      Net17-卓格 2016-06-03 14:46

      @Net 20-北京自由鳥復制粘貼。

欧美性久久久久