Apache是由模塊組成的,除了內核模塊以外,其他的模塊都可以看作是Apache的一個補丁。http__core.c是最基本的,出足它惟一的內核模塊,一個最小的Apache編譯只包含這個模塊,其他的動態模塊是需要在配制文件中定義的二在Redhat L/nux中,只有http_core.c被編譯進默認的Apache中,其余的都被編譯成了so,可以被Apache動態加載。我們可以用httpd—l命令查看哪些模塊被編譯進Apache了。由于Apache這種模塊結構,因此要想了解Apache的組織結構,必須了解Apache的這種模塊式結構。要想了解Apache的模塊結構,首先要明確Apache在處理請求時需要做的事情。下面是Apache處理一個請求的一系列步驟。
(1) ?Filename translating (URL翻譯):將URL翻譯為一個帶有路徑的文件名,或者說轉變為一個指定的文件鏈接。這通常由mod_alias、mod_rewrite、modl_userdir等模塊來完成。
(2) ?Auth ID checking(客戶身份認證):對客戶的身份進行確認,得到用戶的基本信息,如客戶是誰、從哪來、想要什么等等。
(3) ?Auth access checking(客戶權限檢查):在客戶通過了身份確認以后,并不代表客戶有權利訪問所要的資源,Apache還需要做進。步的權限認證,看他是否對某資源有訪問的權限。這一步通常由mod aUth、mod auth dbm等模塊來完成。
(4) ?Determining MIME type ofthe object requested (MIME類型的檢查):當權限檢查完畢以后,說明可以響應該客戶的請求了,這時,Apache開始處理客戶請求的資源,并返回給客戶。但是,客戶要求的信息呵能是多種多樣,這要求Apache對各種信息都能處理,比如對文本文本、HTML文件和GIF圖片等,而且每一種處理都是不一樣的。所以Apache會在這步中確認客廠一請求的資源類型,這步通常是由mod_mime模塊來完成的。
(5) Fixups(修正):這個步驟不是必需的。Apache在處理某些應用時,可能需要延長一些時間,從而在服務器上做一些特定的操作。這一步可以使服務器延長一段處理時間,從而處理諸如設置環境變量之類的操作。
( 6) Actually sending a response back to rhc client(傳送數據):當前面的步驟部完成后,Apache服務器可以開始傳送數據。這也是客戶真正關心的步驟。服務器根據請求資源的不同MIME類型而做小同的處理。比如,CGI程序將交山mod_cgi模塊進行處理。Apache服務器針對每個請求會有三種不同的處理結果:
①請求通過,處理請求;②拒絕請求:③錯誤,返問一個錯誤碼。
(7) Logging the request(記錄日志):當Apache處理完成后,將啟動一個日志模塊執行日志寫入操作。