apache2.4模块开发学习

参考网站:

http://httpd.apache.org/docs/2.4/developer/modguide.html

http://www.cnblogs.com/baochuan/archive/2012/03/27/2418789.html

http://www.apachetutor.org/dev/request


主要是学习apache的流程。像所有的框架一样,apache允许在某些点调用开发者写的程序,很形象的说法就是它提供了钩子,如果其他程序希望能被apache使用,或者说能在apache的处理流程中一展身手,就要钩住这个钩子,让apache启动的时候,把你的程序拉进来,成为apache的助手之一,那么在后面的过程中,就有用武之地了。


这个图很有意思,以apache为中心,助手围着它转:


Hook handling in httpd



对于apache的模块开发的了解还是很肤浅,所以,就先写个hello吧 :)


我的环境是ubuntu14.04,安装的apache时候apache2.4

mod_test.c


#include "apr.h"

#include "apr_lib.h"

#include "apr_strings.h"

#include "httpd.h"

#include "httpd_config.h"

#include "http_core.h"

#include "http_request.h"



static int testhello_handler(request_rec *r){

if(strcmp("hello",r->handler)){

return DECLINED;

        }

        r->content_type="text/html";

ap_rprintf(r,"<h1>my content:hello </h1>");

  return OK;

}


void test_register_hook(apr_pool_t *p){

printf("----register my hell handler to apache...\n");

ap_hook_handler(testhello_handler,NULL,NULL,APR_HOOK_MIDDLE);

}

AP_MODULE_DECLARE_DATA module test_module={

STANDARD20_MODULE_STUFF,

NULL,

NULL,

NULL,

NULL,

NULL,

test_register_hook

};



Makefile

cc=gcc

1:

$(cc)  -Wall -I/usr/local/apache2/include/ -fPIC -shared -o mod_test.so mod_test.c



执行make可以得到mod_test.so。

我在这里的时候遇到一个问题,就是说off64_t不存在的问题。没找到解决方法,按网上的说法,将

/usr/local/apache2/include/apr.h中的

typedef off64_t apr_off_t

改为:

typedef long long apr_off_t

于是就编译通过了。


然后找到httpd.conf

在最后面加上:

LoadModule test_module /home/xxx/mod_test.so

<Location /hello>

      setHandler hello

</Location>


就是说加载我的模块,然后给/hello这个访问设置一个handler:hello,这个只是名称而已啦,真正的判断就是那个里面的strcmp这里,反正约定了一个口号,对得上的就是我要处理的。

重新启动apache,然后访问 http://localhost/hello看是不是出现了大大的内容:my content:hello



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值