设为首页 收藏本站
查看: 1067|回复: 0

[经验分享] [转载] Apache模块开发/用C语言扩展apache(3:一个非常简单的apache module)

[复制链接]

尚未签到

发表于 2017-1-5 10:16:19 | 显示全部楼层 |阅读模式
  有了上面几篇文章的基础,大家自己再下点功夫,应该可以去写一些简单的模块了,下面贴出一个很简单的apache module,大家一起分析一下。


$ cd /usr/local/apache2.2.4
$ vi mod_c.c
 

#include
#include
#include “apr.h”
#include “apr_lib.h”
#include “apr_strings.h”
#define APR_WANT_STRFUNC
#include “apr_want.h”
#include “httpd.h”
#include “http_config.h”
#include “http_core.h”
#include “http_request.h”
module AP_MODULE_DECLARE_DATA c_module;
static int c_handler(request_rec *r)
{
r->content_type=”text/plain”;
ap_rprintf(r,”handler:%s\n”,r->handler);
ap_rprintf(r,”query string:%s\n”,r->args);
ap_rprintf(r,”filename:%s\n”,r->filename);
return OK;
}
static void register_hooks(apr_pool_t *p)
{
ap_hook_handler(c_handler, NULL, NULL, APR_HOOK_MIDDLE);
}

module AP_MODULE_DECLARE_DATA c_module = {
STANDARD20_MODULE_STUFF,
NULL,      
NULL,                       
NULL,      
NULL,                       
NULL,      
register_hooks   
};
   编译并安装这个模块(apache提供的apxs非常好):

$ ./bin/apxs -c ./mod_c.c
$ ./bin/apxs -a -i -n c mod_c.la
   这时apxs会自动帮我们把编译好的mod_c.so安装到modules/目录中,而且httpd.conf中已经把这个module load进去了:

[iyunv@cn-weblog apache2.2.4]# grep mod_c conf/httpd.conf     
LoadModule c_module           modules/mod_c.so
   测试这个模块:

$ ./bin/apachectl stop
$ ./bin/apachectl start
   在IE中访问http://myhostname/index.html?query=yy
  IE中会出现:
  handler:text/html
  query string:query=yy
  filename:/usr/local/apache2.2.4/htdocs/index.html
  说明该module运行成功。
  把上面的module简单解释一下。
  所有的apache module都必须是这个结构体,里面要定义各个内容。

module AP_MODULE_DECLARE_DATA c_module = {
STANDARD20_MODULE_STUFF,
NULL,      
NULL,                       
NULL,      
NULL,                       
//上面4项都是定义httpd.conf中命令的作用的
NULL,       //定义在httpd.conf中添加的命令,和各命令的处理函数
register_hooks          //hooks,定义什么时候执行我们这个module的相关函数
};
   ap_hook_handler(c_handler, NULL, NULL, APR_HOOK_MIDDLE);
  表示在处理内容请求时调用我们函数–c_handler
  同样的状态还有
  OK : 成功请求
  DECLINED :忽略 
  HTTP_METHOD_NOT_ALLOWED :错误处理 
  http://httpd.apache.org/docs/2.2/developer/
  提供了非常不错的文档,可以参考一下。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-324140-1-1.html 上篇帖子: Java命令行解析工具Apache CLI 下篇帖子: 迅雷占用 80端口,apache启动失败.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表