apache模組開發之helloworld
學習apache模組開發已經快兩個星期了,感覺搞apache模組開發挺有意思的,下面來講講apache模組開發的helloworld,非常簡單。
Apache 模組開發主要採用掛鉤子的方法來實現模組開發的,這和linux核心模組開發有點像,說白了就是加一個回撥函式。下面我們來講 這個例子吧。
首先來介紹下apache的一個工具apxs。apxs是一個為Apache HTTP伺服器編譯和安裝擴充套件模組的工具,用於編譯一個或多個源程式或目的碼檔案為動態共享物件,使之可以用由mod_so提供的LoadModule指令在執行時載入到Apache伺服器中。
1.apxs -g -n helloworld
上面的命令可以幫助我們產生一個模組名字為helloworld的模板。
我們來看下helloworld_module這個結構體,它沒個成員的具體作用請看註釋。
它最關鍵的引數為最後一個,這個引數是一個註冊鉤子函式指標,也就是說當我們把模組加入到apache裡面去的時候,他會執行這個註冊函式。在這個函式裡面我們將會註冊我們所要新增的鉤子。
本例子中我們用的是
這個處理函式,這個處理函式註冊了helloworld_handler這個函式。這個函式用於處理我們的請求。
我們來講下執行的順序,模組載入-》執行helloworld_register_hooks函式-》註冊helloworld_handler這個函式到鉤子上去。
這樣一來:當一個http請求來的時候,我們就會自動去執行helloworld_handler這個函式。本例子是一個非常簡單的內容生成器。
下面我們將來進行編譯
執行:apxs -c mod_helloworld.c
執行成功以後我們可以發現在.libs下面會出現mod_helloworld.so這個模組檔案。這就是我們所需要的,對於apache一些自帶的模組一般都放在安裝目錄的modules/下面。
下面我們來對其進行配置
Ok ,重啟apache 然後輸入 http://loacalhost/helloworld 就可以看到
The sample page from mod_helloworld.c
當然這裡這裡只是輸出一句話,我們也可以列印很多html資訊,就類似於servlet一樣。
這樣一來一個簡單的apache內容生成器模組已經開發好了,當然應用比較廣泛的是過濾器模組的開發,最近專案主要也是用過濾器來實現的。
apache 可以開發出一些功能非常強大的模組來,可以為我們定製更好的apache,比如容器中應用的流量統計,cpu統計等。
Apache 模組開發主要採用掛鉤子的方法來實現模組開發的,這和linux核心模組開發有點像,說白了就是加一個回撥函式。下面我們來講 這個例子吧。
首先來介紹下apache的一個工具apxs。apxs是一個為Apache HTTP伺服器編譯和安裝擴充套件模組的工具,用於編譯一個或多個源程式或目的碼檔案為動態共享物件,使之可以用由mod_so提供的LoadModule指令在執行時載入到Apache伺服器中。
1.apxs -g -n helloworld
上面的命令可以幫助我們產生一個模組名字為helloworld的模板。
上面的命令會產生以下程式碼
#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_register_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_register_hooks /* 註冊模組的鉤子函式 */
};
我們來看下helloworld_module這個結構體,它沒個成員的具體作用請看註釋。
它最關鍵的引數為最後一個,這個引數是一個註冊鉤子函式指標,也就是說當我們把模組加入到apache裡面去的時候,他會執行這個註冊函式。在這個函式裡面我們將會註冊我們所要新增的鉤子。
本例子中我們用的是
ap_hook_handler(helloworld_handler, NULL, NULL, APR_HOOK_MIDDLE);
這個處理函式,這個處理函式註冊了helloworld_handler這個函式。這個函式用於處理我們的請求。
我們來講下執行的順序,模組載入-》執行helloworld_register_hooks函式-》註冊helloworld_handler這個函式到鉤子上去。
這樣一來:當一個http請求來的時候,我們就會自動去執行helloworld_handler這個函式。本例子是一個非常簡單的內容生成器。
if (strcmp(r->handler, "helloworld")) {//判斷是否是這個helloworld handler
return DECLINED;//
}
r->content_type = "text/html";
if (!r->header_only)
ap_rputs("The sample page from mod_helloworld.c\n", r);//內容生成
return OK;
下面我們將來進行編譯
執行:apxs -c mod_helloworld.c
執行成功以後我們可以發現在.libs下面會出現mod_helloworld.so這個模組檔案。這就是我們所需要的,對於apache一些自帶的模組一般都放在安裝目錄的modules/下面。
下面我們來對其進行配置
開啟httpd.conf檔案,新增以下資訊
LoadModule helloworld_module *****// 指定.so檔案的路徑。
<Location /helloworld>
setHandler helloworld
</Location>
Ok ,重啟apache 然後輸入 http://loacalhost/helloworld 就可以看到
The sample page from mod_helloworld.c
當然這裡這裡只是輸出一句話,我們也可以列印很多html資訊,就類似於servlet一樣。
這樣一來一個簡單的apache內容生成器模組已經開發好了,當然應用比較廣泛的是過濾器模組的開發,最近專案主要也是用過濾器來實現的。
apache 可以開發出一些功能非常強大的模組來,可以為我們定製更好的apache,比如容器中應用的流量統計,cpu統計等。
相關文章
- Flask Web開發學習之“HelloWorld”FlaskWeb
- Helloworld 驅動模組載入
- java web開發--Servlet學習之HelloWorld 從部署到開發全過程JavaWebServlet
- 微信小遊戲開放域之helloworld遊戲
- vue之HelloworldVue
- Apache模組開發/用C語言擴充套件apache(3:一個非常簡單的apache module)ApacheC語言套件
- 快速開始HelloWorld和Python之禪Python
- JNI/NDK開發指南(1):JNI開發流程及HelloWorld
- Docker之HelloWorld篇Docker
- C#之helloworldC#
- Apache模組開發/用C語言擴充套件apache(4:一個生產環境使用的apache module)ApacheC語言套件
- 函式計算-HelloWorld應用開發函式
- 10個強大的Apache開源模組Apache
- 1、Spring之HelloWorldSpring
- Java RMI之HelloWorld篇Java
- WebService之超級HelloWorldWeb
- Android開發之旅:環境搭建及HelloWorldAndroid
- apache新增php模組ApachePHP
- Flask之 安裝與HelloWorldFlask
- 學習Source Generators之HelloWorld
- nginx模組開發Nginx
- Substrate 區塊鏈應用開發之存證模組的功能開發區塊鏈
- Apache加裝模組(轉)Apache
- Ubuntu 中用 delphi 開發 apacheUbuntuApache
- 智慧硬體開發之WIFI模組訊號測試WiFi
- 模組化開發(二)
- 前端模組化開發前端
- Xposed模組的開發
- Laravel 模組化開發Laravel
- Yaf多模組開發
- struts多模組開發
- Apache apxs新增proxy模組Apache
- Jbpm3.2 開發HelloWorld (簡單請假流程)客戶端客戶端
- 使用typescript開發angular模組(編寫模組)TypeScriptAngular
- netty 之 telnet HelloWorld 詳解Netty
- Flutter外掛開發《iOS原生模組開發》FlutteriOS
- 如何檢視 Apache 模組是否正常Apache
- Apache檢測某模組是否生效Apache