介紹
做為php開發工程師,要想在技術上有所提高,必須要對C有更深入的了解。PHP工程師接觸最多的就是apache服務器,所以今天先拿它練練手。不當之處,大家多多指教。
Apache支持許多特性,大部分通過模塊擴展實現。
准備條件
安裝apache.我安裝的版本是
httpd-2.2.22,注意高版本在安裝過程中問題比較多,建議安裝比較低一些的版本。
安裝過成根據httpd里面的INSTALL文件進行安裝。
Apache的安裝目錄是/opt/modules/httpd
源文件:/home/zhoubaochuan/download/httpd-2.2.22
模塊處理過程
在apache服務器下運行時,一般來說,它以"mod_模塊名"的形式集成。
1> mod模塊接受Apache傳遞過來的請求
2> 處理這些請求,
3> 將處理后的結果返回給Apache。
注意: 對於每一個模塊,必須保證文件名是以"mod_"開始的。如mod_test.c。——如果命名格式不對Apache將認為此模塊不合法。
運行過程
Apache的運行分為啟動階段和運行階段。
啟動階段
>> 將以特權用戶root或超級管理員Administrator完成啟動。
>> 整個過程在單線程中。包括配置文件解析(http.conf),模塊加載(如mod_test)和系統資源初始化(如日志文件,共享內存段,數據庫鏈接等)
>> 這個階段把許多比較慢或者花費比較高的操作都集中在這個階段完成,以減少后面請求服務的壓力。
運行階段
>> Apache放棄特權用戶級別,使用普通用戶,主要基於安全考慮。
>> 處理http請求,處理過程分為鏈接,處理,斷開。
加載機制
檢查是否為Apache模塊:
通過檢查module結構體中的magic字段實現的。而magic字段是通過STANDARD20_MODULE_STUFF體現。

在這個宏中magic的值為MODULE_MAGIC_COOKIE
激活模塊
Apache會調用相關函數ap_add_loaded_module將模塊激活(激活:將模塊放入相應的鏈表中(ap_top_modules鏈表,ap_top_modules鏈表用來保存Apache中所有被激活的模塊。)
Apache的每一個模塊都是以module結構體的形式存在。可以細看源碼與注釋。
編碼——mod_test模塊為例
1.先寫個Makefile文件(避免每次都打一堆的命令,make一下就都好了——很好用啊!大家試試)
2.寫實現代碼
3.編譯文件.
4.開始在apache中應用,配置httpd.conf文件,加入下面一行文字 .
5.看看效果
總結
這篇文章只是apache模塊的局部實現過程,在生產環境中,會有很多的處理過程。包括對請求的處理,認證等等。
通過apache模塊,我們有的時候可以直接繞過web語言的實現機制,直接通過C語言,把一些簡單的數據存入介質中,如文件,數據庫,內存,然后做為api接口供其他業務調用。
參考資料:《The Apache Modules Book--Application Development with Apache》