nginx核心结构

ngx_cycle_s

    struct ngx_cycle_s {
        void                  ****conf_ctx; // 配置数据的起始存储位置
        ngx_pool_t               *pool;

        ngx_log_t                *log;
        ngx_log_t                 new_log;

        ngx_uint_t                log_use_stderr;  /* unsigned  log_use_stderr:1; */

        ngx_connection_t        **files;
        ngx_connection_t         *free_connections;
        ngx_uint_t                free_connection_n;

        ngx_module_t            **modules;      // 运行时模块指针数组
        ngx_uint_t                modules_n;    // 模块数量
        ngx_uint_t                modules_used;    /* 模块是否已加载的标志位 unsigned  modules_used:1; */

        ngx_queue_t               reusable_connections_queue;
        ngx_uint_t                reusable_connections_n;

        ngx_array_t               listening;
        ngx_array_t               paths;

        ngx_array_t               config_dump;
        ngx_rbtree_t              config_dump_rbtree;
        ngx_rbtree_node_t         config_dump_sentinel;

        ngx_list_t                open_files;
        ngx_list_t                shared_memory;

        ngx_uint_t                connection_n;
        ngx_uint_t                files_n;

        ngx_connection_t         *connections;
        ngx_event_t              *read_events;
        ngx_event_t              *write_events;

        ngx_cycle_t              *old_cycle;

        ngx_str_t                 conf_file;
        ngx_str_t                 conf_param;
        ngx_str_t                 conf_prefix;
        ngx_str_t                 prefix;
        ngx_str_t                 lock_file;
        ngx_str_t                 hostname;
    };
  • modules 数组仅仅起到集中所有模块的作用,模块的层次和调用关系由数据结构里的ctx_index、index和各种指针实现。

ngx_module_t 模块定义

  • type的种类就是六大核心模块选择:NGX_CORE_MODULE、NGX_EVENT_MODULE、NGX_HTTP_MODULE、NGX_STREAM_MODULE、NGX_MAIL_MODULE。stream是处理四层的模块。

ngx_http_conf_ctx_t

  • 存储三个层次的配置信息

  • 这里的void* 存储的是回调函数(如create_loc_conf()) 返回的结果,也就是自定义的配置信息

ngx_conf_s

  • 解析配置文件时的重要数据结构,表示解析当前配置命令时的运行环境(Context)。

ngx_command_s

  • type 是设置作用域或参数数量等信息

ngx_http_module_t

  • 合并配置,高层次的值作为默认值赋给低层次,合并操作通常是逐个检查当前结构里的值,如果未设置,就默认使用高层次的,如果设置了,就使用当前的。也就是底层次设置优先。

最后更新于

这有帮助吗?