首先产生一个主进程,主进程执行一系列工作后产生一个或者多个工作进程。工作进程是nginx服务器提供服务的主体。
nginx服务器将接收到的web请求通过代理转发到后端服务器
nginx服务器为了提高对请求的响应效率,进一步降低网络压力,采用了缓存机制,将历史应答数据缓存到本地。
结构:主进程、工作进程、后端服务器和用于为缓存文件简历索引的进程
主进程:与外界通信和对内部其他进程进行管理
1、读取Nginx配置文件并验证其有效性和正确性
2、建立、绑定和关闭socket
3、按照配置生成、管理和结束工作进程
4、接收外界指令,比如重启、升级及退出服务器指令
5、不中断服务,实现平滑重启,应用新配置
6、不中断服务,实现平滑升级,升级失败进程回滚处理
7、开启日志文件,获取文件描述符
8、编译和处理perl脚本
工作进程:由主进程生成,数量可以通过Nginx配置文件指定,生存于主进程的整个生命周期
1、接收客户端
2、将请求依次送入各个功能模块进行过滤处理
3、IO调用,获取响应数据
4、与后端服务器通信,接收后端服务器处理结果
5、数据缓存,访问缓存索引、查询和调用缓存数据
6、发送请求结果,响应客户端请求
7、接收主程序指令,比如重启,升级和退出指令
重点监视工作进程的运行状态
缓存索引重建及管理进程:缓存模块主要由缓存索引重建和缓存索引管理两类进程完成工作。缓存索引重建进程是在nginx服务启动一段时间之后(默认一分钟)由主进程生成,在缓存元数据重建完成后就自动退出。主要工作是:根据本地磁盘上的缓存文件在内存中建立索引元数据库。该进程启动后,对本地磁盘上存放缓存文件的目录结构进行扫描,检查内存中已有的缓存元数据是否正确,并更新索引元数据。
进程交互:
管道机制(channel)
主进程-工作进程交互:主进程根据配置文件决定生成的工作进程的数量,然后建立一张全局的工作进程表用于存放当前未退出的所有工作进程。并建立一个单向的管道并将其传递给该工作进程。包含了主进程向工作进程发出的指令、工作进程ID、工作进程在工作进程表中的索引和必要的文件描述符等信息。每个工作进程都可以捕获管道中的可读事件,从而读取并解析指令
工作进程-工作进程交互:建立管道,即可通信。由于工作进程之间是相互隔离的。当w1需要向w2发送指令时,首先在主进程给它的其他工作进程信息中找到w2的进程ID,然后将正确的指令写入指向w2的通道(通道的建立是在获取w2的进程ID之后),w2捕获到管道中的事件后,解析指令并采取相应措施。
Run Loops 事件处理循环模型
进程内部用来不停地调配工作,对事件进行循环处理的一种模型。
该模型是一个集合,集合中的每一个元素称为一个Run-Loop。每个Run-Loop可运行在不同的模式下,其中可以包含它所监听的输入事件源,定时器以及在实践发生时需要通知的Run-Loop监听器。
nginx中实现了该处理模型用来处理客户端发来的请求事件。基于异步任务处理。