ngx_init_cycle 学习笔记

ngx_init_cycle


1.申请地址池,并且在地址池中申请分配新的cycle结构
2.给cycle结构中的各项赋值
  conf_prefix/prefix/conf_file/conf_param/paths/open_files/shared_memory/listening/reusable_connections_queue/conf_ctx/hostname
3.初始化core模块的配置创建函数,并将配置指针放入到配置上下文conf_ctx中
/*ngx_modules[i]->index had been set before function ngx_int_cycle
 * only index 0,6,7 will be excute here
 * 0---ngx_core_conf_t
 * 6---ngx_openssl_conf_t
 * 7---ngx_regex_conf_t*/
4.初始化conf结构
  主要是以下几个数据
  args/temp_pool/ctx/cycle/pool/log/module_type/cmd_type
  conf.module_type = NGX_CORE_MODULE
  conf.cmd_type = NGX_MAIN_CONF
  关键需要注意是
  conf.ctx = cycle->conf_ctx
  conf.cycle = cycle
5.调用ngx_conf_param
6.调用ngx_conf_parse解析配置文件  
   6.1 调用ngx_conf_read_token一行一行解析读取配置文件,
   返回的情况:
   1) 遇到;,说明一行结束,将配置数据保存在cf->args->elts动态数组中,该数组默认大小为10,可以动态变大,类似于c++里面的vector,返回ok
   2) 遇到 {, 返回NGX_CONF_BLOCK_START,进入block块中解析子项
   3) 遇到 }, 返回NGX_CONF_BLOCK_START
   6.2 调用ngx_conf_handler处理配置文件数据,把相应的数据应用到具体模块和业务上去。
       配置数据信息从cf-args->elts中获取
  1) 循环所有模块的所有命令,去寻找命令关键字
  2) 若1)中找不到,直接返回,若找到获取对应的ctx配置信息保存的结构
  3) 执行command的set回调函数将配置信息存入ctx配置信息中

7. 当配置文件解析完毕后,就初始化core module的Config,如果在配置文件中有配置,则不在初始化,只初始化配置文件中没有配置的项

8. listen socket的初始化,创建并bind等操作, 打开所有的监听套接口(依次进行socket,bind,listen)

9. 调用init_module对所有的模块进行初始化

10.关闭或删除残留在old_cycle中的资源

11.返回 

      

你可能感兴趣的:(ngx_init_cycle 学习笔记)