[开发记录]Nginx模块开发(一)

引言:最近实习由于项目需要,为了追求稳定性加上烤鱼利用Nginx本身提供的优秀的基础设施,使用了Nginx提供的一些扩展功能来做Nginx本身的开发。

Nginx提供了很强的可以自己定制扩展功能的“插件式”扩展,在需要加钩子的地方构造回调函数来完成相应功能(说起来容易做起来难)。

Nginx可以提供三种方式的模块扩展:

1.Handler方式处理HTTP请求

2.Filter方式对于输出的HTTP做过滤,可以加解密或其他功能等

3.Load Balancer,作为HTTP方向代理时候的负载均衡所用

由于项目原因,暂时使用的是Handler方式,不过大多数场景下也是使用了Handler方式

Nginx处理HTTP请求的时候,Nginx模块通过读取配置文件的参数找到相应的钩子函数

比如我们的模块是一个取得日志文件的Nginx模块,以HTTP POST方式

按照Nginx模块的命名规则就是  ngx_http_get_log_module

 

比如在Nginx模块的配置文件  nginx/conf/nginx.conf server 段中增加如下选项

location /get_log {

    get_log on;

}

在模块编写完成后在 ./configure 的时候加上--add-module=/yourdir/ngx_http_get_log_module.c 选项

在模块中与 ngx_http_get_log_module.c 中编写配置文件config

 

ngx_addon_name=ngx_http_get_log_module

HTTP_MODULES="$HTTP_MODULES ngx_http_get_log_module"

NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_get_log_module.c"

在编译的时候 ./configure --add-module=/yourdir/ngx_http_get_log_module

make &&make install

然后再用HTTP方式测试,client端可以用浏览器或者是其他的第三方库来做

我利用的是python的 urllib2 做HTTP POST的

posted @ 2012-07-16 19:23  _Boz  阅读(6597)  评论(0编辑  收藏  举报
4AI?Z:cp1z?_RJQle1]Gs;P!T)RHroW|