首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

nginx源码分析(二)——http模块的初始化过程

2012-08-14 
nginx源码分析(2)——http模块的初始化过程前一篇文章介绍了nginx的启动初始化过程,包括了所有模块的初始化

nginx源码分析(2)——http模块的初始化过程

        前一篇文章介绍了nginx的启动初始化过程,包括了所有模块的初始化过程,比如http模块、事件模块等。这里再详细介绍一下http模块的启动过程,还记得在前一篇文章中提到过ngx_conf_parse函数背后隐藏了大量的细节吗?这里就揭开这层神秘的面纱,去看看几个重要的http模块是如何初始化的。这里依然沿用上一篇文章的结构,首先来看几个重要的数据结构。

1. 重要的数据结构

        1. ngx_http_module_t

        所有http模块都是ngx_http_module_t类型,所有的属性都是回调函数,在http模块初始化过程的不同阶段调用。当一个指令既允许出现在main块(在http{}块内,但是在server{}块外的区域)、server块(在server{}块内,但是在location{}块外的区域)、location块内时,就需要对这些指令进行继承和覆盖的处理,由merge_src_conf和merge_loc_conf完成。

    /* optimize the lists of ports, addresses and server names */    if (ngx_http_optimize_servers(cf, cmcf, cmcf->ports) != NGX_OK) {        return NGX_CONF_ERROR;    }
        在ngx_http_optimize_servers函数中完成初始化ngx_http_conf_addr_t的wc_head、wc_tail和hash,就是以server_name为key,对应的ngx_http_core_srv_conf_t为值的hash结构,wc_head和wc_tail是带通配符的server_name。最重要的就是调用ngx_http_init_listening函数,它会调用ngx_http_add_listening添加ngx_listening_t,即监听socket,最后调用ngx_http_add_addrs。在ngx_http_add_listening内会调用ngx_http_create_listening创建新的ngx_listening_t,然后设置其handler为ngx_http_init_connection,这个函数在监听到新的连接时调用,具体就是在ngx_event_accept函数中。然后,设置ngx_listening_t相关的一些属性,rcvbuf、sndbuf、backlog等。

        上面就是http块初始化的全过程,这里主要列出server块和location块的初始化。下一篇详细介绍nginx配置文件的解析。


热点排行