思維導圖 點擊查看大圖
介紹 做為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》