参考资料
HTTP过滤模块也是一种HTTP模块,与普通HTTP处理模块不同在于:
1.一个请求仅由一个HTTP处理模块处理,而可以被任意个HTTP过滤模块处理
2.普通的HTTP模块倾向于完成请求的核心功能,而HTTP过滤模块所做的工作是对发送给用户的HTTP响应包做一些加工
HTTP过滤模块的简单例子
该过滤模块实现的功能是:用户的请求由static静态文件模块进行处理,根据URI返回磁盘中的文件给用户,然后该过滤模块就会在返回给用户的相应包体前添加一段字符串:"[my filter prefix]"
static静态文件模块处理完成后会调用ngx_http_send_header跟ngx_http_output_filter来调用过滤模块
1.编写config文件
跟普通HTTP模块不同的是HTTP_MODULES变量要改为HTTP_FILTER_MODULES
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"
2.配置项与上下文
该过滤模块希望在nginx.conf中由一个控制当前HTTP过滤模块是否生效的配置项,它的参数值是on或者off。首先建立如下结构来存储配置项
typedef struct{
ngx_flag_t enable;
} ngx_http_myfilter_conf_t;
下面实现的ngx_http_myfilter_create_conf用于为存储配置项的结构体分配内存
static void *ngx_http_myfilter_create_conf(ngx_conf_t *cf)
{
ngx_http_myfilter_conf_t*mycf;
mycf=(ngx_http_myfilter_conf_t *)ngx_pcalloc(cf->pool,sizeof(ngx_http_myfilter_conf_t));if(mycf==NULL){returnNULL;
}
mycf->enabl