参考网站:
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为中心,助手围着它转:
对于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