目录
一、数据结构
1. ngx_cycle_t的数据结构
2. ngx_core_conf_t的数据结构
二、初始化过程
1. 创建一个内存池。
2. 拷贝配置文件的路径前缀(/usr/local/nginx)
3. Nginx的路径前缀拷贝
4. 拷贝配置文件信息
5. 拷贝配置参数信息
6. 路径信息初始化
7. 初始化打开的文件句柄
8. 初始化shared_memory链表
9. 初始化listening数组
10. 模块创建和核心配置结构初始化ngx_core_conf_t
11. 配置文件nginx.conf解析
12. 创建PID文件
13. 遍历cycle->open_files链表中的文件,并且打开
14. 创建共享内存并初始化
15. 处理listening数组,并开始监听socket
16. 关闭或删除残留在old_cycle中的资源
Nginx的大部分初始化工作主要围绕一个类型为ngx_cycle_t类型的全局变量(cycle)展开。本文主要讲解cycle的数据结构以及初始化过程中干了什么事情。
cycle的初始化过程在/src/core/cycle.c文件中。
在使用gdb调试nginx源码时,需要设置启动变量
set args -c /usr/local/nginx/conf/nginx.conf
在上图中完成了配置文件
一、数据结构
1. ngx_cycle_t的数据结构
cycle是Nginx贯穿全局的一个全局变量。阅读Nginx的源码必须得先搞清楚cycle全局变量的初始化过程。
全局变量指针指向该结构体,并使用volatile修饰
保存启动时的环境变量
给nginx的模块编号,仅仅是编号
将模块编号和名字转移到cycle->modules数组中
可以看出0和1是NGX_CORE_MODULE 模块,会执行相应的create_conf函数
会执行上面的ngx_core_module_create_conf函数,将从内存中分配 并存储到
至此完成了 配置文件中 worker_processes 解析以及赋值操作
2. ngx_core_conf_t的数据结构
ngx_code_conf_t的数据结构主要用于装在Nginx的nginx.conf的核心配置文件的参数。后面我们会具体讲解配置文件nginx.conf的解析过程以及和模块。
1. 创建一个内存池。
后续所有的内存都会被分配到这个内存池上面。
2. 拷贝配置文件的路径前缀(/usr/local/nginx)
主要拷贝到 cycle->conf_prefix
3. Nginx的路径前缀拷贝
拷贝到cycle->prefix
4. 拷贝配置文件信息
/nginx/conf/nginx.conf 文件路径
5. 拷贝配置参数信息
6. 路径信息初始化
7. 初始化打开的文件句柄
8. 初始化shared_memory链表
9. 初始化listening数组
10. 模块创建和核心配置结构初始化ngx_core_conf_t
- 主要初始化cycle->modules
- 创建核心配置结构,Nginx的核心配置会放到ngx_core_conf_t *ccf数据结构上
- 初始化核心配置结构ngx_core_conf_t *
11. 配置文件nginx.conf解析
配置文件解析会在下章中详细解读。
12. 创建PID文件
Nginx将PID写入文件内,/usr/local/nginx-1.4.7/nginx.pid,后续对Nginx进行重启、停止、信号操作就可以使用这个PID了。
13. 遍历cycle->open_files链表中的文件,并且打开
cycle->open_file主要是在ngx_conf_open_file这个方法里面放入文件路径,然后下面去打开文件。
主要是日志文件和配置文件。
14. 创建共享内存并初始化
新旧shared_memory链表的比较,相同的共享内存保留,旧的不同的共享内存被释放,新的被创建
15. 处理listening数组,并开始监听socket
16. 关闭或删除残留在old_cycle中的资源
- 释放多余的共享内存;
- 关闭多余的侦听sockets;
- 关闭多余的打开文件
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/34661.html