nginx学习笔记三(nginx启动框架的处理流程)
2016-05-09 16:23
323 查看
《深入理解nginx》中是用流程图+文字的形式讲解了nginx的启动框架处理流程(Page 275),我是结合源码对应着教材过了一篇nginx的启动流程,记录如下:
ngx_init_cycle函数:nginx\src\core\Ngx_cycle.c
2.调用ngx_init_cycle方法初始化ngx_cycle_t结构体
ngx_init_cycle函数完成了配置项解析等很多的事情,具体参见《深入理解nginx》
3.根据配置情况,以不同的方式运行nginx
注:阅读源码的过程中可以参考 https://github.com/y123456yz/reading-code-of-nginx-1.9.2 这个有注释的nginx工程来学习
一.源码位置
main函数:nginx\src\core\nginx.cngx_init_cycle函数:nginx\src\core\Ngx_cycle.c
二.启动处理流程
1.解析命令行,处理参数if (ngx_get_options(argc, argv) != NGX_OK) { return 1; } if (ngx_show_version) { ngx_show_version_info(); if (!ngx_test_config) { return 0; } } /* TODO */ ngx_max_sockets = -1; ngx_time_init(); .... if (ngx_process_options(&init_cycle) != NGX_OK) { return 1; } if (ngx_os_init(log) != NGX_OK) { return 1; } /* * ngx_crc32_table_init() requires ngx_cacheline_size set in ngx_os_init() */ if (ngx_crc32_table_init() != NGX_OK) { return 1; } if (ngx_add_inherited_sockets(&init_cycle) != NGX_OK) { return 1; } if (ngx_preinit_modules() != NGX_OK) { return 1; }以上程序对应于《深入理解nginx》page 276图中的1,2两个步骤。
2.调用ngx_init_cycle方法初始化ngx_cycle_t结构体
cycle = ngx_init_cycle(&init_cycle); if (cycle == NULL) { if (ngx_test_config) { ngx_log_stderr(0, "configuration file %s test failed", init_cycle.conf_file.data); } return 1; }
ngx_init_cycle函数完成了配置项解析等很多的事情,具体参见《深入理解nginx》
3.根据配置情况,以不同的方式运行nginx
if (ngx_process == NGX_PROCESS_SINGLE) { ngx_single_process_cycle(cycle); } else { ngx_master_process_cycle(cycle); }
注:阅读源码的过程中可以参考 https://github.com/y123456yz/reading-code-of-nginx-1.9.2 这个有注释的nginx工程来学习
相关文章推荐
- nginx安装waf防护
- 脚本实现检测nginx服务是否正常
- nginx配置location总结及rewrite规则写法
- Django系列七:Django Nginx+uwsgi 安装配置
- Nginx开启GZip
- Nginx做负载均衡无法加载css,js
- (总结)Nginx配置文件nginx.conf中文详解
- nginx学习资源
- nginx博客系统(内含nginx图片缩略图处理代码,不错)
- startsBBS在nginx环境下的部署,出现布局错误和验证码不能显示的解决方法
- nginx配置
- nginx日志分割
- 绝对详细!Nginx基本配置、性能优化指南
- 20150410--Lnmp+Nginx-02
- 20150410--Lnmp+Nginx-01
- yum 安装php,mysql,php-fpm,nginx
- Nginx学习笔记1-编译Nignx,搭建开发环境
- 利用Nginx实现域名转发 不修改主机头
- nginx重启
- Nginx负载均衡的几种算法