Nginx模块开发1_明白自定义模块的编译流程

自定义模块的编译流程

  • --add-module参数
    configure使用--add-module参数指定添加模块目录.

  • config脚本
    由--add-module指定的目录保存为$ngx-addon-dir环境变量. 其他环境变量由$ngx-addon-dir下的config脚本提供.

    • 局部环境变量用小写表示,例如
      • $ngx_addon_dir,
      • $ngx_addon_name.
    • 全局环境变量用大写表示,例如
      • $NGX_ADDON_SRCS
      • HTTP_MODULES
      • CORE_LIBS
        ...等等
  • 编译流程

    ./configure --add-moudle=/root/workspace/ngx_http_heelo_world_module
    
    • configure将--add-moudle选项值导出为$ngx_addon_dir环境变量
    • configure执行$ngx_addon_dir/config脚本,导出其他环境变量. 局部环境变量用小写表示,全局环境变量用大写表示. 关键环境变量:
      ngx_addon_name=ngx_http_hello_world_module #指定模块名,显示在ngx_modules数组
      NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_hello_world_module.c" #指定模块源文件,如果多个,全部加上.
      HTTP_MODULES="$HTTP_MODULES ngx_http_hell_world_module" #在源文件定义的ngx_module_t类型全局变量
      
    • configure根据导出的环境变量生成objs/Makefile以及ngx_modules.c等文件.

    这样,你就明白了为什么 源文件里必须定义"ngx_module_t ngx_http_hello_world_module"? 另外,其他配置或函数通过ngx_module_t数据结构指定. 换言之, ngx_module_t全局变量就是模块的编加载点.

posted @ 2016-09-05 11:31  zolo®  阅读(637)  评论(0编辑  收藏  举报