NGINX开篇

前言

最近空闲时间比较多, 开始阅读nginx源码, 阅读的过程总结和笔记整理了下, 汇集成了一个系列的文章, 由于nginx功能实在太多, 没法做到面面俱到, 只对已经阅读过的源码进行记录总结, 以后会逐步进行扩充.

源码版本

nginx1.6.2

源码目录

|-objs    
|   |-src
|
|-src
|   |-core
    |
    |-event
    |   |-modules
    |
    |-http
    |   |-modules
    |
    |-mail
    |
    |-misc
    |
    |-os
    |   |-unix

1.objs目录是自动生成的一些源码的目录,执行完configure文件后会根据配置生成的源文件。
2.src/core目录中是nginx核心数据结构和算法,例如程序入口,配置文件解析,hash表,链表,红黑树等实现。
3.src/event目录是nginx事件处理部分,主要是网络事件,src/event/modules包含了各种不同的网络模型模块,根据不同系统配置,会自动选择一种最优的网络模型,select,poll,epoll等均有实现。
4.src/misc主要包含一个测试模块和google性能分析模块。
5.src/mail主要是邮件服务的模块。
6.src/os/unix主要是跟平台系统相关的一些函数的封装,保证上层接口的调用一致性。
7.src/http这里是nginx对http请求的具体处理部分,modules目录下包含各种http处理的模块过程,如果我们对nginx进行扩展的时候,一般都是添加到这个目录下。

启动过程

ngx_strerror_init 初始化错误信息,由于strerror调用非异步信号安全,因此nginx调用streeror获取所有系统错误信息,保存到一个数组中,以后直接根据错误号取数组中的错误信息。
    |
    |
    V
ngx_time_init     初始化程序中用到的时间,由于时间函数调用异常频繁,nginx对时间做了缓存,减少调用系统函数次数,提高效率。
    |
    |
    V
ngx_regex_init    初始化正则表达式库
    |
    |
    V
ngx_log_init      初始化日志文件目录
    |
    |
    V
ngx_init_cycle    初始化程序循环数据结构
    |
    |
    V
是否单进程模式  ------> 是  ------> ngx_single_process_cycle 单进程模式循环体
    |                           1.初始化所有的注册模块
    |                       2.for死循环调用ngx_process_events_and_timers函数,进行事件派发和处理。
    V
    否
    |
    |
    V
ngx_master_process_cycle 多进程或多线程模式循环体
    |
    |
    V       
sigprocmask重置一部分信号未阻塞模式,防止后面创建进程等操作产生信号中断,然后调用ngx_start_worker_processes创建进程,之后将所有信号重置为非阻塞,主进程进入
    |
    |
    V
ngx_start_worker_processes 根据事先配置好的进程数量循环调用ngx_spawn_process 创建进程。
    |
    |
    V
ngx_spawn_process 首先创建一个socket对,用于主进程和子进程之间的通信,然后调用fork创建进程,子进程调用回调函数prc,即ngx_worker_process_cycle。
    |
    |
    V
ngx_worker_process_cycle同样调用ngx_process_events_and_timers函数进行事件派发和处理。

nginx启动的大致流程, 启动过程中关于配置的解析过程相对比较复杂, 是一个递归调用, 比较难以理解, 后面的文章会讲解到.

NGINX(一)内存结构 : http://www.cnblogs.com/ourroad/p/4838794.html
NGINX(二)内存池 : http://www.cnblogs.com/ourroad/p/4838362.html
NGINX(三)HASH表 : http://www.cnblogs.com/ourroad/p/4844860.html
NGINX(四)配置解析 : http://www.cnblogs.com/ourroad/p/4861096.html
NGINX(五)模块 : http://www.cnblogs.com/ourroad/p/4861240.html
NGINX(六)扩展 : http://www.cnblogs.com/ourroad/p/4863051.html
NGINX(七)分段下载 : http://www.cnblogs.com/ourroad/p/4860477.html

转载于:https://www.cnblogs.com/ourroad/p/4863758.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值