6.4 HTTP过滤模块的简单例子

本节通过一个简单的例子来说明如何开发HTTP过滤模块。场景是这样的,用户的请求由static静态文件模块进行了处理,它会根据URI返回磁盘中的文件给用户。而我们开发的过滤模块就会在返回给用户的响应包体前加一段字符串:"[my filter prefix]"。需要实现的功能就是这么简单,当然,可以在配置文件中决定是否开启此功能。

图6-2简单地描绘了处理HTTP头部的方法将会执行的操作,而图6-3则是处理HTTP包体的方法将会执行的操作。

6.4.1 如何编写config文件 - 图1

图 6-2 过滤模块例子中,HTTP头部处理方法的执行活动图

6.4.1 如何编写config文件 - 图2

图 6-3 过滤模块例子中,HTTP包体处理方法的执行活动图

与图6-2相关的代码可参见6.4.5节。

与图6-3相关的代码可参见6.4.6节。

由于HTTP过滤模块也是一种HTTP模块,所以大家会发现本章myfilter过滤模块的代码与第3章介绍的例子中的代码很相似。

6.4.1 如何编写config文件

可以仅用1个源文件实现上述HTTP过滤模块,源文件名为ngx_http_myfilter_module.c。在该文件所在目录中添加config文件,其内容如下:


ngx_addon_name=ngx_http_myfilter_module

HTTP_FILTER_MODULES="$HTTP_FILTER_MODULES ngx_http_myfilter_module"

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


将模块名添加到HTTP_FILTER_MODULES变量后,auto/modules脚本就会按照6.2.2节中定义的顺序那样,将ngx_http_myfilter_module过滤模块添加到ngx_modules数组的合适位置上。其中,NGX_ADDON_SRCS定义的是待编译的C源文件。