Apache模塊開發入門還是非常簡單的,只需簡單的幾步驟就可以DIY出自己的helloworld,本文測試系統為Ubuntu 12.04,在該系統下只需安裝好apache和apache2-threaded-dev這兩個包就可以了。然後直接使用apxs2編譯和安裝模塊。
1、安裝apache過程請參考:
Ubuntu VPS安裝Apache+PHP+MySQL指南
2、安裝apache2-threaded-dev
sudo apt-get install apache2-threaded-dev
默認安裝路徑為:/usr/bin/apxs2。
拷貝另存為mod_helloworld.c。
#include "httpd.h" #include "http_config.h" #include "http_protocol.h" #include "ap_config.h" /* The sample content handler */ static int helloworld_handler(request_rec *r) { if (strcmp(r->handler, "helloworld")) { return DECLINED; } r->content_type = "text/html"; if (!r->header_only) ap_rputs("The sample page from mod_helloworld.c\n", r); return OK; } static void helloworld_hooks(apr_pool_t *p) { ap_hook_handler(helloworld_handler, NULL, NULL, APR_HOOK_MIDDLE); } /* Dispatch list for API hooks */ module AP_MODULE_DECLARE_DATA helloworld_module = { STANDARD20_MODULE_STUFF, //用於編譯後的模塊產生版本信息 NULL, /* 創建目錄配置結構*/ NULL, /* 合並目錄配置結構 */ NULL, /* 創建主機配置結構 */ NULL, /* 合並主機配置結構 */ NULL, /* 為模塊配置相關指令 */ helloworld_hooks /* 注冊模塊的鉤子函數 */ };
其中,request_rec是個復雜結構體,其表示一個http請求,從這個結構體中可以獲得浏覽器連接的各種信息。
參考:
/*request_rec 下變量
char *hostname;//域名 localhost
char *args; //域名參數(?號以後的內容)a=123
char *filename;//文件路徑 /var/www/test
const char *content_encoding;
...
*/
編譯:
apxs2 -c mod_helloworld.c
安裝:
apxs2 -i mod_helloworld.la
或,一句話命令:
執行完成後,helloworld模塊被安裝到:/usr/lib/apache2/modules,這裡可能會報告權限錯誤,請確保有管理員權限方可執行安裝模塊動作。
在/etc/apache2/mods-available下面創建helloworld.conf文件(頁可能是在/etc/apache2/apache2.conf,根據實際選擇),內容如下:
LoadModule helloworld_module /usr/lib/apache2/modules/mod_helloworld.so <Location /helloworld> SetHandler helloworld </Location>
然後,為helloworld.conf創建一個快捷方式並放到/etc/apache2/mods-enabled下面:
ln -s /etc/apache2/mods-available/helloworld.load /etc/apache2/mods-enabled/helloworld.load
所以,模塊目錄在:/usr/lib/apache2/modules
當前生效模塊目錄在:/etc/apache2/mods-available
service apache2 restart
重啟apache後,在浏覽器中輸入”localhost/hellworld”,浏覽器顯示:
The sample page from mod_helloworld.c