httpd2.4

一、httpd-2.4:依賴於更高版本的apr和apr-util,需要1.4以及以上版本。

apr:apache portable runtime 是apache實現跨平臺的工具。

 

1、 httpd-2.4的新特性:

(1)、 MPM支持在運行時裝載。

   如:--enable-mpms-shared=all --with-mpm=event

(2)、支持event mpm

(3)、支持異步讀寫

(4)、在每模塊以及每個目錄上指定日誌級別。

(5)、每請求配置<If>,<Elseif>

(6)、增強的表達式分析器

(7)、毫秒級的keepalive timeout,如100ms

(8)、基於FQDN的虛擬主機不再需要NameVirtualHost命令

(9)、支持使用自定義變量。

(10)、新增了一些特性模塊:mod_proxy_fcgi,mod_ratelimit,mod_request,mod_remoteip

(11)、對於基於IP的訪問控制做了修改,不再支持使用order ,allow,deny這些配置,而統一使用require進行

wKiom1hrE0WjI-J6AAA2lP_I3pI921.jpg


2、編譯安裝httpd-2.4步驟(相關軟件已上傳51cto down中):

注意httpd-2.4.9要使用apr-1.5.0以及以上版本。

(1)、解決依賴關係,需要安裝:

   #yum -y install pcre-devel

   #yum -y groupinstall  "Server Platform Development"

   #yum -y groupinstall "Development tools"


(2)、編譯安裝apr(http://apr.apache.org下載apr):

   #tar xf apr-1.5.0.tar.bz2

   #cd apr-1.5.0

   #./configure --prefix=/usr/local/apr

   #make && make install


(3)、編譯安裝apr-util,因apr-util依賴於apr,所以編譯時要指定--with-apr的位置:

   #tar xf apr-util-1.5.3.tar.bz2

   #cd apr-util-1.5.3

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

   #make && make install


(4)、編譯安裝httpd-2.4:

   #tar xf httpd-2.4.9.tar.bz2

   #cd httpd-2.4.9

   #./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24 --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=event

    --enable-proxy --enable-proxy-http --enable-proxy-ajp

   #make && make install

注意:在編譯安裝httpd2.4時,構建MPM模塊,有兩種選擇,一種是把MPM編譯成靜態模塊,另一種是把MPM編譯成動態模塊。如果把MPM編譯成了靜態模塊,那麼要改變MPM,只能通過重新編譯安裝httpd修改,比較麻煩。如果在編譯安裝httpd時,把MPM編譯成了動態模塊,那麼改變MPM,可以在/etc/httpd/httpd.conf配置文件中編輯LoadModule指令選擇不同的MPM重新載入即可。這裏就是採用的動態模塊 --enable-so 


3、httpd-2.4:編譯安裝後的後續配置:

(1)、導出頭文件,目的是要基於apache進行二次開發或者後續編譯php要用到:

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

(2)、導出庫文件:沒有庫文件,如果有#vi /etc/ld.so.conf.d/httpd.conf


(3)、導出幫助手冊:

  #vi /etc/man.config中加MANPATH /usr/local/apache/man


(4)、輸出二進制程序,即安裝服務:

  A、#vi /etc/profile.d/httpd.sh

  內容爲:export PATH=/usr/local/apache/bin:$PATH

  重讀配置文件:#source httpd.sh

  B、啓動Apache2.4.9 :#apachectl start

  C、運行httpd -V 查看安裝的apache版本。

wKiom1hmHS3T4P0IAABJhUWdEc8101.jpg

D、啓動後訪問頁面:

wKioL1hmHVXB-eUbAAAUWPtWfqA600.jpg


4、MPM模塊:

(1)、httpd2.2只支持prefork和worker兩種MPM模塊,默認爲prefork。兩種模塊的具體配置信息在/etc/httpd/conf/httpd.conf中。如果要使用worker要修改#vi /etc/sysconfig/httpd中的#HTTPD=/usr/sbin/httpd.worker,將#註釋去掉即可。

(2)httpd2.4支持prefork、worke和event三種MPM模塊。具體參數配置信息在/etc/httpd24/extra/httpd-mpm.conf中。上面編譯默認使用event,那麼將event修改爲prefork,動態修改/etc/httpd24/httpd.conf中的LoadModule即可,見下圖:

wKioL1VyuFCR0S7nAAE1CADxNEU303.jpg

(3)、httpd2.4中event參數說明如下:

<IfModule mpm_event_module>

    StartServers             默認進程數

   ThreadsPerChild          每個子進程可以生成的線程數

    MinSpareThreads          最小空閒線程數

    MaxSpareThreads          最大空閒線程數

    MaxRequestWorkers        最大線程數量

    MaxConnectionsPerChild   子進程的最大連接數,當達到設置值以後,APACHE就會結束當前的子進程

</IfModule>

5、httpd2.4基於IP的訪問控制:

(1)、httpd2.2使用order allow,deny而httpd2.4使用Require。

(2)、允許所有主機訪問:Require all granted

拒絕所有主機訪問:Require all deny

限定特定IP主機訪問:Require ip IPADDR

限定特定IP主機不可訪問:Require not ip IPADDR

注:IPADDR 可以爲192.168.1.110;

         192.168.1.110/255.255.255.0;

       192.168.1.110/24

       192.168

(3)、限定特定主機名訪問:Require host HOSTNAME

限定特定主機名不可訪問:Require host HOSTNAME

注:HOSTNAME 可以爲具體主機: www.a.com

          DOMAIN域名: .a.com

6、配置虛擬主機:

(1)、關閉中心主機:註釋掉DocumentRoot "/usr/local/apache/htdocs"

(2)、啓用httpd-vhosts.conf:去掉註釋Include /etc/httpd24/extra/httpd-vhosts.conf

(3)、在httpd-vhosts.conf配置虛擬主機即可。


二、I/O模型:

1、阻塞/非阻塞:從調用者的角度看調用者怎麼被處理的。

(1)、阻塞:當一個進程發起I/O調用時,被調用的I/O不能立即返回結果,

    那麼當前進程未完成之前,當前進程會被掛起。

(2)、非阻塞:當一個進程發起I/O調用時,被調用的I/O完成前不會阻塞當前進程而是立即返回一個結果(結果無論成功與否),發起者需要自己不斷的監聽結果是否完成。

2、同步/異步:從被調用者的角度看被調用者怎麼響應的。

(1)、同步:進程發起一個過程調用(功能、函數)調用後,在沒得到結果前,該調用將不會返回。

(2)、異步:進程發起一個過程調用(功能、函數)調用後,即使調用者不會理解得到結果,

         該調用卻會返回,返回的是未完成狀態,當調用完成後,內核會自行通知調用者。

3、I/O模型:

(1)、等待數據:數據從磁盤經內核處理後到內核內存;

等待複製完成:然後將數據從內核內存Copy到進程內存。


 A、同步阻塞:一個進程只能響應一個請求,很少用。

 B、同步非阻塞:先非阻塞,在阻塞,效率比同步阻塞還低,很少用。

 C、I/O複用:多個同步阻塞。

   簡單解釋就是,能一下看到所有請求的進展,但需要不停的查看。

   常用實現方式有select(),poll()。perfork就是使用I/O複用的select()方式實現的。

 D、event事件驅動:先異步非阻塞,在阻塞。

   簡單解釋就是,不用查看所有請求的進展,好了會自動通知,可見效率提高。

    邊緣觸發:只通知一次。

    水平觸發:如果一次沒通知到,就通知多次。

 E、AIO:真正的異步非阻塞。


(2)、mmap:數據經內核處理後到內核內存,用戶進程直接訪問內核內存中的數據。

   注:Nginx:支持異步IO,邊緣觸發,MMap。




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