Nginx模块开发(二)(

本文详细介绍了Nginx中Filter过滤器的工作原理和开发过程,以Footer模块为例,讲解了如何在HTTP响应正文末尾添加自定义文字。内容包括Footer模块的目标、启动、分析、项目文件组织、编译和运行步骤,帮助读者理解Filter的开关指令、全局变量、处理函数等核心概念。
摘要由CSDN通过智能技术生成

Filter过滤器

 SHAPE  \* MERGEFORMAT

nginx的filter的工作方式和做鱼有些类似。比如一条鱼,可以把它切成鱼片(也可以切块,切泥),然后通过不同的烹饪方法就得到水煮鱼或者日式生鱼片或者废了等等。同样是一条鱼,加工得到的结果却截然不同,就是因为中间不同的工序赋予了这条鱼各种属性。nginx的filter也是一个道理,前面的Handler好比这条鱼,filter负责加工,最后得到的HTTP响应就会各种各样,格式可以是JSON或者YAML,内容可能多一些或者少一些,HTTP属性可各异,可以选择压缩,甚至内容不见了。


Footer

footer是一个常用的模块,比较简单,是入门学习filter最好的教程。

目标

在HTTP正文末尾添加一段文字,文字由用户定义。

Startup

先贴代码,大家可以有个感性认识。从现在开始,请大家注意nginx源代码的格式要求:

#include <ngx_config.h>

#include <ngx_core.h>

#include <ngx_http.h>

缩进使用4个空格

 

 


typedef struct {

    ngx_hash_t                types;

    ngx_array_t              *types_keys;

 

不同的段落间空两行

    ngx_http_complex_value_t *variable;

} ngx_http_footer_loc_conf_t;

 

 

静态函数先声明后定义

 

typedef struct {

    ngx_str_t                 footer;

 

每行长度最大80字符,超出需要换行

} ngx_http_footer_ctx_t;

 

 

static char *ngx_http_footer_filter(ngx_conf_t *cf, ngx_command_t *cmd,

    void *conf);

static void *ngx_http_footer_create_loc_conf(ngx_conf_t *cf);

static char *ngx_http_footer_merge_loc_conf(ngx_conf_t *cf,

    void *parent, void *child);

static ngx_int_t ngx_http_footer_filter_init(ngx_conf_t *cf);

 

 

static ngx_command_t  ngx_http_footer_filter_commands[] = {

 

    { ngx_string("footer"),

      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,

      ngx_http_footer_filter,

      NGX_HTTP_LOC_CONF_OFFSET,

      0,

      NULL },

 

    { ngx_string("footer_types"),

      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE,

      ngx_http_types_slot,

      NGX_HTTP_LOC_CONF_OFFSET,

      offsetof(ngx_http_footer_loc_conf_t, types_keys),

      &ngx_http_html_default_types[0] },

 

      ngx_null_command

};

 

 

static ngx_http_module_t  ngx_http_footer_filter_module_ctx = {

    NULL,                                             

    ngx_http_footer_filter_init,                      

 

    NULL,                                             

    NULL,                                             

 

    NULL,                             

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值