44 Linux Apache 加载库模块之Hello world! - 雪炭网

Linux Apache 加载库模块之Hello world! 2014-10-12 12:20:36

( 还没有投票,继续加油! )
分享:
31.3K

通常在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混用,来达到安全性的例子。







头像

snowcoal
  • WEB
  • Apache加载库文件

本文标签:

WEBApache加载库文件

收藏到我的私密空间

标题:Linux Apache 加载库模块之Hello world!

作者:花花世界

你暂未登录,请登录后才可收藏至您的私密空间 确认取消
雪炭网

键盘操作 更便捷 -雪炭网雪中送炭-乐趣无限

如果本站的内容有幸帮助到了您,建议您了解一下当页的广告内容哦,我们的进步离不开您的支持,Thank you~