1、编译安装Apache、比如安装了httpd-2.4.4版本
2、写好模块文件、如新增一个 mod_helloworld.c
/* 02 * File: helloworld.c 03 * Author: luojie 04 * 05 * Created on March 25, 2015, 4:18 PM 06 */ 07 08 #include <httpd.h> 09 #include <http_protocol.h> 10 #include "http_config.h" 11 12 /* 13 * 14 */ 15 static int helloworld_handler(request_rec *r){ 16 17 if(!r->handler || strcmp(r->handler,"helloworld")){ 18 return DECLINED; 19 } 20 21 ap_set_content_type(r,"text/html;charset=ascii"); 22 ap_rputs("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD/ HTML 4.01//EN\">\n",r); 23 ap_rputs("<html><head><title>Apache HelloWorld Module </title></head>",r); 24 ap_rputs("<body><h1>Hello world ! HelloWorld Module </h1> </body></html>",r); 25 26 return OK; 27 } 28 29 /* 30 * 31 */ 32 static void helloworld_hooks(apr_pool_t *pool){ 33 ap_hook_handler(helloworld_handler,NULL,NULL,APR_HOOK_MIDDLE); 34 } 35 36 37 /* 38 * 39 */ 40 module AP_MODULE_DECLARE_DATA helloworld = { 41 STANDARD20_MODULE_STUFF, 42 NULL, 43 NULL, 44 NULL, 45 NULL, 46 NULL, 47 helloworld_hooks 48 };
3、编译、利用apxs工具
cd /usr/local/httpd/bin
./apxs -a -c mod_helloworld.c
./apxs -i -a -n helloworld mod_helloworld.la
4、修改HTTP配置文件http.conf
LoadModule helloworld modules/mod_helloworld.so
5、重启Apache
./apachectl restart
6、其中编译参数
-n:指定装载模块的名字。如果不使用这个选项,那么装载进来的模块将是以so为后缀的文件名。
-q:查询Apache的一些基本配置。例如,/usrflocal/apache/bin/apxs -q PREFIX将显示PREFIX的路径。
-s:更改用.q参数查询到的参数。例如,/usrfloca/apache/apxs -sPREFIX-/usr/local/apachel.
-c:编译模块。
-i:安装模块。
-a:自动添加LoadModule到hrtpd.conf文件中。
7、访问测试
http://127.0.0.1/helloworld
8、常见错误
apxs:Error: Sorry, cannot determine bootstrap symbol name. apxs:Error: Please specify one with option `-n'.
加个-n参数,给模块起个名字
httpd: Syntax error on line 164 of /usr/local/httpd/conf/httpd.conf: Can't locate API module structure `helloworld_module' in file /usr/local/httpd/modules/mod_helloworld.so: /usr/local/httpd/modules/mod_helloworld.so: undefined symbol: helloworld_module
编辑http.conf文件
发表评论