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为中心,助手围着它转:


apache2.4模块开发学习_第1张图片



对于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,"

my content:hello

");

  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

      setHandler hello


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

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



你可能感兴趣的:(apache2.4模块开发学习)