Apache的工作模式
(推薦教程:apache從入門到精通)
prefork的工作原理
一個單獨的控制進(jìn)程(父進(jìn)程)負(fù)責(zé)產(chǎn)生子進(jìn)程,這些子進(jìn)程用于監(jiān)聽請求并作出應(yīng)答。
Apache總是試圖保持一些備用的 (spare)或是空閑的子進(jìn)程用于迎接即將到來的請求。這樣客戶端就無需在得到服務(wù)前等候子進(jìn)程的產(chǎn)生。在Unix系統(tǒng)中,父進(jìn)程通常以root身份運行以便邦定80端口,而 Apache產(chǎn)生的子進(jìn)程通常以一個低特權(quán)的用戶運行。
User和Group指令用于配置子進(jìn)程的低特權(quán)用戶。運行子進(jìn)程的用戶必須要對他所服務(wù)的內(nèi)容有讀取的權(quán)限,但是對服務(wù)內(nèi)容之外的其他資源必須擁有盡可能少的權(quán)限。
worker的工作原理
每個進(jìn)程能夠擁有的線程數(shù)量是固定的。服務(wù)器會根據(jù)負(fù)載情況增加或減少進(jìn)程數(shù)量。
一個單獨的控制進(jìn)程(父進(jìn)程)負(fù)責(zé)子進(jìn)程的建立。每個子進(jìn)程能夠建立ThreadsPerChild數(shù)量的服務(wù)線程和一個監(jiān)聽線程,該監(jiān)聽線程監(jiān)聽接入請求并將其傳遞給服務(wù)線程處理和應(yīng)答。Apache總是試圖維持一個備用(spare)或是空閑的服務(wù)線程池。
這樣,客戶端無須等待新線程或新進(jìn)程的建立即可得到處理。在Unix中,為了能夠綁定80端口,父進(jìn)程一般都是以root身份啟動,隨后,Apache以較低權(quán)限的用戶建立子進(jìn)程和線程。User和Group指令用于配置Apache子進(jìn)程的權(quán)限。雖然子進(jìn)程必須對其提供的內(nèi)容擁有讀權(quán)限,但應(yīng)該盡可能給予他較少的特權(quán)。
另外,除非使用了suexec ,否則,這些指令配置的權(quán)限將被CGI腳本所繼承。
Event MPM
這是Apache最新的工作模式,它和worker模式很像,不同的是在于它解決了keep-alive長連接的時候占用線程資源被浪費的問題,在event工作模式中,會有一些專門的線程用來管理這些keep-alive類型的線程,當(dāng)有真實請求過來的時候,將請求傳遞給服務(wù)器的線程,執(zhí)行完畢后,又允許它釋放。
這增強了在高并發(fā)場景下的請求處理。在unix系統(tǒng)中的apache2.4版本使用的就是這個模式。