php底層深度探索(3) ---Apache啓動階段分析 王澤賓

這一篇多寫一點內容,主要是今天終於有時間了。最近工做一直比較忙,公司裏一大攤子事情須要處理,哥們首先得賣身混飯吃,其次才能在閒得蛋疼的時候寫一點。閒話少敘,書接上回:
 
l  Apache的生命週期
這一節的內容將會闡述php模塊的載入過程,請參考Apache的生命週期示意圖(prefork模式下)。
Apache的運行分爲啓動階段和運行階段。
 
1.         啓動階段
在啓動階段,Apache主要進行配置文件解析(例如http.conf以及Include指令設定的配置文件等)、模塊加載(例如mod_php.so,mod_perl.so)和系統資源初始化(例如日誌文件、共享內存段等)工做。
在這個階段,Apache爲了得到系統資源最大的使用權限,將以特權用戶rootX系統)或超級管理員administrator(Windows系統)完成啓動。
 
Apache和「php處理機」的裝配過程就是在這個階段完成的。
php處理機」就是負責解釋和執行你的php代碼的系統模塊。這個名字是我特地創造的,目的是爲了幫助你理解本節的內容,後面的章節還會給出更專業的名稱。
 
你單獨作過php的安裝配置嗎?
若是你作過相似的工做,下面的內容很容易理解;若是你沒有作過,能夠嘗試安裝一下,有助於加深你的理解。不過,個人文章向來深刻淺出,我會盡可能把這個過程講得更淺顯一些。其實php的安裝很是簡單,若是你很感興趣的話,能夠到網上隨便搜一篇安裝指南,按步驟照作就能夠了。
php最終集成到Apache系統中,還須要對Apache進行一些必要的設置。這裏,咱們就以phpmod_php5 SAPI運行模式爲例進行講解,至於SAPI這個概念後面咱們還會詳細講解。
假定咱們安裝的版本是Apache2 Php5,那麼須要編輯Apache的主配置文件http.conf,在其中加入下面的幾行內容:
Unix/Linux環境下
LoadModule php5_module modules/mod_php5.so
AddType application/x-httpd-php .php
注:其中modules/mod_php5.so X系統環境下mod_php5.so文件的安裝位置。
 
Windows環境下:
LoadModule php5_module d:/php/php5apache2.dll
AddType application/x-httpd-php .php
注:其中d:/php/php5apache2.dll 是在Windows環境下php5apache2.dll文件的安裝位置。
這兩項配置就是告訴Apache Server,之後收到的Url用戶請求,凡是以php做爲後綴,就須要調用php5_module模塊(mod_php5.so/ php5apache2.dll)進行處理。
 
這個過程能夠參考如下的示意圖:
 
 
 
Apache啓動階段的源碼包含在server/main.c中,我整理了一下源碼中的對應關係:
 
 
 
不熟悉unix/linux的同窗可能會問so文件(mod_php5.so)是個什麼樣的文件?
unix/linux,so後綴文件是一個DSO文件,DSOwindows系統下的dll是等價概念,都是把一堆函數封裝在一個二進制文件中。調用它們的進程把它們裝入內存後,會將其映射到本身的地址空間。
DSO全稱爲Dynamic Shared Object,即動態共享對象。DLL全稱爲Dynamic Link Library 即動態連接庫。
Apache 服務器的體系結構的最大特色,就是高度模塊化。若是你爲了追求處理效率,能夠把這些dso模塊在apache編譯的時候靜態鏈入,這樣會提升Apache 5%左右的處理性能。
 
2.         運行階段
在運行階段,Apache主要工做是處理用戶的服務請求。
在這個階段,Apache放棄特權用戶級別,使用普通權限,這主要是基於安全性的考慮,防止因爲代碼的缺陷引發的安全漏洞,象微軟的IIS就曾遭受「紅色代碼(Code Red)」和「尼姆達(Nimda)」等惡意代碼的溢出***。
相關文章
相關標籤/搜索