一、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進行
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版本。
D、啓動後訪問頁面:
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即可,見下圖:
(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。