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
合并配置,高层次的值作为默认值赋给低层次,合并操作通常是逐个检查当前结构里的值,如果未设置,就默认使用高层次的,如果设置了,就使用当前的。也就是底层次设置优先。
最后更新于
这有帮助吗?