Nginx源码main函数解读
2015-12-12 00:52
561 查看
Nginx源码剖析 框架篇
nginx的main函数解读
nginx启动显然是由main函数驱动的,main函数在在core/nginx.c文件中,其源代码解析如下,涉及到的数据结构在本节仅指出其作用,将在第二节中详细解释。nginx main函数的流程图如下:
需要说明的:
1.始化错误提示列表
以errno为下标,元素就是对应的错误提示信息。2.获取命令行参数,保存在全局变量中
可以设置的命令行参数如下表所示
3.时间、正则表达式和log的初始化
4.初始化cycle结构,创建内存池
5.保存命令行参数到几个全局的变量中
将命令行参数保存到ngx_os_argv、ngx_argc以及ngx_argv这几个全局的变量中。这算是一个备份存储,方便以后master进程做热代码替换之用。
6.用命令行参数初始化cycle
7.根据操作系统确定一些参数
信息会被保存到一些全局变量中,如页大小ngx_pagesize, CPU cacheline
8.初始化一个做循环冗余校验的表
初始化一个做循环冗余校验的表,由此可以看出后续的循环冗余校验将采用高效的查表法
9.通过环境变量NGINX完成socket的继承
通过环境变量NGINX完成socket的继承,继承来的socket将会放到init_cycle的listening数组中。同时可以读取master进程传递的平滑升级信息等等
10.初始化所有模块的index信息
初始化所有模块的index信息,即对所有模块进行编号,ngx_modules数却是在自动编译的时候生成的,位于objs/ngx_modules.c文件中
11.初始化ngx_cycle ※
用上面收集的init_cycle信息初始化ngx_cycle,这行代码是nginx启动过程中最重要的一个步骤,在第3节将详细展开。
12.获取配置项
9)ccf 为ngx_core_conf_t 将在第2节给出详细定义,这个地方需要解释下
ccf->master是从配置文件中解析master_process配置项所得的值,初始化为NGX_CONF_UNSET(-1),在配置项中,
如果flag类型的配置项master_process被设置为on,则其值为1,
如果为off,则其值为0,
ngx_process为全局变量,用于记录要采用的工作模式,未被初始化,因此初始值是0(uint型全局变量会被系统默认初始化为0),相关宏定义如下:
#define NGX_PROCESS_SINGLE 0
#define NGX_PROCESS_MASTER 1
#define NGX_PROCESS_SIGNALLER 2
#define NGX_PROCESS_WORKER 3
#define NGX_PROCESS_HELPER 4
因此,下面的if判断语句的含义就是:用来处理一种特殊情况,即如果在配置项中未设置master_process配置项或者是设置为打开,ngx_process未被设置,采用默认值0,这个时候要采用master工作模式。因为master_process优先级高,且nginx默认采用master模式如果在配置项中设置master_process为off,那么if依据不会执行。最终nginx工作模式取决于ngx_proces的初值0,即采用单进程模式。
13.初始化信号
初始化信号;主要完成信号处理程序的注册
14.创建守护进程
无继承sockets,且设置了守护进程标志,则创建守护进程
15.创建进程记录文件
非NGX_PROCESS_MASTER=1进程,不创建该文件
16.进入进程主循环
根据ngx_process确定启动单进程模式还是多进程模式
/**********************************witch*****************************/
http://blog.csdn.net/witch_soya
/**********************************2015年9月10日 15:11:16*****************************/
相关文章推荐
- 二、Ubuntu下编译安装Nginx1.8.0
- 3种LVS/Nginx/HAProxy负载均衡器的对比分析
- nginx error_log 错误日志配置说明
- nginx忽略favicon.ico日志
- nginx+lua_module安装
- Nginx学习-3 解决nginx负载均衡的session问题
- Nginx学习-2.1 简单实现负载均衡
- Nginx日志每小时自动转储
- Nginx1.1 Nginx配置文件详细说明
- Nginxs学习-1安装Nginx 将Nginx作为静态网页服务器
- Nginx学习-2 使用Nginx搭建HTML web服务器 实现SSL证书安全访问
- nginx添加sticky模块-cookie保持会话
- nginx 操作
- nginx 操作
- Nginx+Keepalived实现站点高可用
- FastDFS+Nginx分布式文件系统部署安装
- nginx 杂记
- nginx 根据参数选择文档根目录
- Linux下安装Nginx详细图解教程
- 【nginx配置】nginx做非80端口转发