Linux Apache 加载库模块之Hello world! 2014-10-12 12:20:36
通常在Linux服务器上,Apache加载动态链接库一般是为了安全与效率,
那么如何加载呢?总的来说分为3步:
1:编译预载库文件(.so)
2:配置Apache
3:测试结果(跟据提示排查原因)
//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 /* 注册模块的钩子函数 */ };
首先,需apache能正常安装,例如,我输入localhost/ 显示It works;
首先,我们把这个c文件转换成 so文件,编译方式如下:
apxs2 -c mod_helloworld.c [注1]
apxs2 -i mod_helloworld.la
// apxs2 -iacn mod_helloworld.cpp ./mod_helloworld.so
完成后,找到:/etc/apache2/mods-available 和 mods-enabled(快捷方式)
将里面的hellowold.load(mod_hellworld.load)内容全改为:[注2]
LoadModule helloworld_module /usr/lib/apache2/modules/mod_helloworld.so <Location /helloworld> SetHandler helloworld </Location>
重启apache:
// service apache2 restart [注3]
测试:
localhost/helloworld
结果(成功):
The sample page from mod_helloworld.c
问题解决方案经验分享注释123:
1、apxs2不识别?
请安装-------
//apt-get install apache2-threaded-dev
提示其它错误?看看会不会是C文件里面的错误,经测试正常
更多错误,请看详细提示,一看就明了!
2:路径中我的是/apache2/但有的是httpd,如出问题,请确认一下路径。
另外,还有时会两个文件在修改时,快捷方式的名称后会多了个.http.load,请将http.删除,保持一致
不过看显示也会找到,会提示这个未定义或是名称不认识
3:重启出错没有显示OK?
仔细看看提示就两句话,是so未找到?可以亲自去找一下,看在不,不在搜一下,肯定有,拷贝到那里。
路径错误会很正常,这也就是从网上找文章测试的难点所在吧。不过不用急,跟着错误一个个修正,也就这点事。
最后说明:环境:Ubuntu Apache
以上测试的是:apache截获url解析是helloworld后,调用c模块
调用方法过程中是最简洁的代码,其实有更多的功能,更多参数,可以去查一下Apache API
会进一步测试,动态加载模块与加载C++文件加载Mysql数据库文件,及加载的API与其他如PHP混用,来达到安全性的例子。
原文链接(Hyperlink):https://snowcoal.com/article/418.html
原创内容,尊重版权,转载需注明出处;商业及其他特殊用途转载需原作者同意。