apache的功能特性
1.高度模塊化? ? ? ? ? ? ? ? ? ? ? ? ? ? ?( 推薦學(xué)習(xí):apache入門?)
Apache支持把更多的功能以模塊化的形式存在,通過加載和卸載模塊完成不同功能的增加和刪除,類似于linux內(nèi)核的模塊化,可以加載和卸載內(nèi)核的驅(qū)動模塊。構(gòu)成了core+modules模型;
2.支持動態(tài)加載和卸載模塊
就是類似熱拔插一樣的功能,可以實現(xiàn)不重啟服務(wù)的情況加載和卸載模塊并使其生效。
3.支持多路處理模塊MPM
Apache可以有三種(處理)工作模式,分別為:
prefork—多進(jìn)程I/O模型,一個進(jìn)程處理一個請求,是Apache的默認(rèn)工作模式
該工作模式下存在一個主進(jìn)程和多個子進(jìn)程,那些個子進(jìn)程由主進(jìn)程生成和回收。主進(jìn)程負(fù)責(zé)生成套接字、管理子進(jìn)程,但是不負(fù)責(zé)處理請求,主進(jìn)程由root身份執(zhí)行;
子進(jìn)程才是真正負(fù)責(zé)處理請求的角色,一開始會有多個空閑子進(jìn)程等待處理請求,一個子進(jìn)程處理一個請求,子進(jìn)程由apache用戶執(zhí)行。? ? ? ??
worker—-復(fù)用多進(jìn)程I/O模型
該工作模式下,存在一個主進(jìn)程,同樣地主進(jìn)程負(fù)責(zé)管理子進(jìn)程,并不處理請求,主進(jìn)程生成多個子進(jìn)程,同時每個子進(jìn)程生成多個線程,一個線程處理一個請求,這樣假設(shè)子進(jìn)程數(shù)為M,每個子進(jìn)程的線程數(shù)為N,則此工作模式可以并發(fā)處理M*N個請求。該模式下占用內(nèi)存小,多用于大型網(wǎng)站。
event和worker工作類似,都是并發(fā)處理M*N個請求。但是event做出的改進(jìn)是,每個子進(jìn)程中對線程劃分的更加詳細(xì),有管理線程和服務(wù)線程兩種,為什么要這樣設(shè)計呢。
我們知道http1.1版本默認(rèn)為持久連接keepalive,如果建立連接卻沒有發(fā)送請求,就會一直占用此連接的帶寬直到規(guī)定時間才會釋放,因此加入了管理進(jìn)程,專門監(jiān)視keepalive類型的服務(wù)線程,當(dāng)發(fā)生真正的請求的時候,管理線程把請求轉(zhuǎn)交給服務(wù)線程處理,處理完畢后管理線程會釋放服務(wù)線程的資源。增加了帶寬的利用率。
4.虛擬主機(jī)
有些網(wǎng)站的訪問量低的可憐,這么低的訪問量如果專門用一臺服務(wù)器來搭建的話,實在是劃不來,因此就想到了在一臺服務(wù)器上搭建多個網(wǎng)站,多個網(wǎng)站共用一臺服務(wù)器降低資源消耗,這樣的功能就叫做虛擬主機(jī)功能。
一個服務(wù)器搭建多個網(wǎng)站,每個網(wǎng)站對應(yīng)不同的域名,外部客戶端想要訪問的時候,DNS會將這些不同網(wǎng)站的域名解析到同一臺服務(wù)器,服務(wù)器根據(jù)HTTP請求的首部行中的域名信息,將請求轉(zhuǎn)至對應(yīng)的目錄資源。
小tips:虛擬主機(jī)和虛擬機(jī)的區(qū)別->虛擬主機(jī)是一臺主機(jī)上邊部署多個網(wǎng)站的功能,支撐這么多網(wǎng)站的主機(jī)運(yùn)行的是同一個操作系統(tǒng);而虛擬機(jī)是一個系統(tǒng)通過VMware、LVM等技術(shù)虛擬出來的多個主機(jī),這些虛擬的主機(jī)可以運(yùn)行不同的操作系統(tǒng)。
支持動態(tài)網(wǎng)頁。這樣說會很晦澀,先來說什么是網(wǎng)關(guān),網(wǎng)關(guān)就是兩個網(wǎng)段內(nèi)的主機(jī)進(jìn)行通信的交界口,同一網(wǎng)段內(nèi)的主機(jī)通信時是不需要經(jīng)過網(wǎng)關(guān)的,但是一旦不同網(wǎng)段的主機(jī)進(jìn)行通信,就需要把數(shù)據(jù)先交給網(wǎng)關(guān),讓網(wǎng)關(guān)轉(zhuǎn)交給另一個網(wǎng)段。
同理再來看CGI,web服務(wù)器只能發(fā)送靜態(tài)頁面,當(dāng)服務(wù)器收到例如index.php的文件請求時,服務(wù)器總不能把index.php發(fā)送出去吧。
因為這是一個動態(tài)文件啊,此時CGI會把index.php處理成一種規(guī)定的數(shù)據(jù)格式,然后交給php解釋器執(zhí)行,隨后再把執(zhí)行后的數(shù)據(jù)經(jīng)過CGI處理,最后把結(jié)果由服務(wù)端發(fā)送給客戶端,這里的CGI就是起到了靜態(tài)請求和動態(tài)請求的轉(zhuǎn)換接口。
6.支持反向代理
7.可以實現(xiàn)負(fù)載均衡
8.支持路徑別名
為了不讓用戶知道服務(wù)端資源的真正目錄,可以對目錄做一個別名,用戶只需要知道這個別名即可,別名會自動跳轉(zhuǎn)到真正的目錄。
9.可以實現(xiàn)安全認(rèn)證機(jī)制