代码之家  ›  专栏  ›  技术社区  ›  Vitaly Kushner

如何正确注册nginx头过滤器?

  •  2
  • Vitaly Kushner  · 技术社区  · 16 年前

    我正在写一个nginx模块。

    static ngx_int_t
    mod_py_postconfig(ngx_conf_t *cf)
    {
        ngx_http_next_header_filter = ngx_http_top_header_filter;
        ngx_http_top_header_filter = mod_py_headers_filter;
        return NGX_OK;
    }
    

    但从未调用处理程序。我已经在gdb中的ngx\u http\u top\u header\u filter change上设置了一个断点,似乎首先调用了我的模块的postconfig,然后运行ngx\u http\u write\u filter\u模块的postconfig,该模块覆盖ngx\u http\u top\u header\u filter,而不存储旧值:

    static ngx_int_t
    ngx_http_write_filter_init(ngx_conf_t *cf)
    {
        ngx_http_top_body_filter = ngx_http_write_filter;
    
        return NGX_OK;
    }
    

    它似乎是被设计成最后一个被调用的,那么为什么我的模块的postconfig被首先调用呢?

    从这里我可以看到模块的顺序是在objs/ngx\u modules.c中设置的

    1 回复  |  直到 16 年前
        1
  •  6
  •   Vitaly Kushner    16 年前

    好吧,我自己想出来的。把它记录在这里以防其他人需要。

    HTTP_MODULES="$HTTP_MODULES ngx_http_my_module_name"
    

    我搜索了HTTP\u模块的用法,发现 nginx/auto/modules 实际构建的脚本 ngx_modules.c nginx/自动/模块

    HTTP_AUX_FILTER_MODULES="$HTTP_AUX_FILTER_MODULES ngx_http_my_module_name"