首页 > 系统相关 >Nginx工作原理

Nginx工作原理

时间:2022-08-17 15:45:27浏览次数:75  
标签:请求 工作 处理 Worker Nginx Master 进程 原理

Nginx作为边缘节点,它处理的流量是其他节点的数倍,是如何处理上万的请求了?
我们将从Nginx的进程管理机制和请求处理流程2个方面介绍Nginx如何高效的处理请求。

进程管理机制

Nginx设计了合理的进程模型,合理的分配工作,让Nginx进程有序的处理请求。

Nginx进程模型

Nginx的进程模型分为单进程模型和多进程模型。
单进程模型只有Master进程,所有的工作由Master进程完成,适用于开发调试模式。我们可以在主配置端配置master_process on开启单进程模式。
1.png
多进程模型包含Master进程、Worker进程和Cache进程。它是Nginx默认的方式,更加的健壮,适用于生产环境多核架构。下图可以看出Worker进程和Cache进程是Master进程的子进程。
2.png

Nginx进程分工

Nginx多进程模型分工非常明确。
Nginx的Master进程负责监控和管理Worker进程、Cache进程的状态,当发现子进程异常会重新启动一个新的子进程。另外,Master进程负责读取配置文件并验证配置文件的有效性和正确性,并通过通知子进程使用新的配置。
Nginx的Worker进程负责处理客户端的请求。它既需要与客户端保持连接接收客户端的请求,也需要与上游服务器通信,接收上游服务器的响应报文发送给客户端。
Nginx的CacheLoader和CacheManager进程主要负责管理缓存数据。CacheLoader进程负责缓存数据,而CacheManager进程负责管理缓存的过期时间。
4.png

Nginx启动

上一篇博文中我们介绍了Nginx的管理命令,Nginx启动、优雅重启的背后做了哪些准备工作了?
通过开启Nginx的Debug日志去观察Nginx的启动过程,总结了如下图示。
5.png
我们都知道优雅重启(nginx -s reload)是不影响业务的同时完成新的配置加载。在业务繁忙时期执行Nginx优雅重启,可能出现Nginx的Worker进程的状态是 worker process is shutting down的情况,如下图。
6.png
通过开启Nginx的Debug日志观察Nginx优雅重启可以看出它经历了如下几个步骤完成优雅重启。

  • Master进程收到管理员发来的Reload信号。
  • Master进程检查配置文件语法正确性。如果正确则继续,否则报错并回滚配置。
  • Master进程打开新的监听端口。
  • Master进程使用新的配置文件启动新的Worker进程
  • Master进程向老的Worker进程发送QUIT信号让其优雅退出。
  • 老的Worker进程关闭监听句柄,并继续为当前连接提供服务
  • 老的Worker进程处理完当前连接后结束进程

上图的的情况是由于118230的Worker进程已经关闭了监听句柄,并继续为当前的连接提供服务。由于当前的连接并未关闭所以该进程还不能退出,直到当前的连接断开该Worker进程才退出。
8.png

请求处理流程

为了更高效的处理请求,Nginx制定了处理请求的流程。
Nginx将Worker进程设计为可以同时处理成千上万个连接。每个Worker进程都是对等、独立并且同等竞争来自客户端的请求。Worker进程处理请求之前必须要抢夺锁并注册事件,这种方式避免了多个Worker进程处理同一个请求的情况。
开启Nginx的Debug日志去观察Nginx处理请求的过程总结如下图。
9.png

HTTP请求处理阶段

针对HTTP请求,Nginx定义了11个处理阶段保证HTTP请求处理过程的有序进行。
10.png
在源码的https://github.com/nginx/nginx/blob/master/src/http/ngx_http_core_module.h 107行至126行也能找到HTTP请求阶段的定义。
不管官方模块、第三方模块或者自定义模块,只要是需要处理HTTP的请求的模块,都需要定义请求处理阶段。

标签:请求,工作,处理,Worker,Nginx,Master,进程,原理
From: https://www.cnblogs.com/zhanglaotang/p/16590890.html

相关文章

  • nginx使用
    windows启动:(1)检查80端口应用netstat-ano|findstr0.0.0.0:80(2)杀死该进程taskkill/F/pid9016(3)cmd管理员模式进入nginx文件夹nginx.exe (4)停止nginx(快速/......
  • Filbeat采集nginx-ingress日志
     一、创建configmap配置文件注:filebeat6以上版本需要将prospectors改为inputs,paths下指定的nginx-ingress日志路径匹配模式以及hosts指定的kafka地址需要根据实......
  • 基础网络通信原理
    我们和运营商的关系实际网络通信的基础设施都是运营商搭建的,我们访问服务器的数据并不是直接发送到了对应的服务器,而是需要经过运营商建设的各种基站以及各种路由器,最终......
  • Let's Go系列---channel的用法及原理
    基本语法创建channelch1:=make(chanstruct{})ch2:=make(chanint,10)读写channel从channel中读取数据叫做recv;向channel写数据叫做send。//发送数据到channel......
  • Kubernetes学习笔记(八):kubectl apply原理
    本地的yaml配置文件会转换成json格式的文件kubectlapply会对本地配置文件、最后一次apply的配置文件(Json)和实时对象配置文件进行对比,当本地配置文件更新后也会同时......
  • flutter —— 布局原理与约束 2
    一、布局模型Sliver的布局流程如下:Viewport将当前布局和配置信息通过SliverConstraints传递给Sliver。Sliver确定自身的位置、绘制等信息,保存在geometry中(一个......
  • Redis---zset有序集合(底层原理+图解)
    1.前言顾名思义,Rediszset(有序集合)中的成员是有序排列的,它和set集合的相同之处在于,集合中的每一个成员都是字符串类型,并且不允许重复;而它们最大区别是,有序集合是有序的,s......
  • Financial - 情景分析中的“曲线-PCA”是怎么工作的?
    from天翼老师背景描述:假设某个曲线上有10个期限点(term),我们要会看过去100天的这条曲线的变化。 计算过程:1)这是第1天,与第0天之间,每个期限点的变化:△0f(t)=[f1(t1)......
  • nginx升级
    nginx升级升级背景:Nginx是一款轻量级Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。Nginx存在漏洞,该漏洞允许攻击者从DNS服务器伪造UDP数据包造成1-byte的内......
  • 【组成原理-数据】浮点数的编码与运算
    目录1浮点数的格式1.1符号(S)1.2阶码(E)1.3尾数(M)2IEEE754标准2.1短浮点数(float型)短浮点数的解释2.2长浮点数(double型)长浮点数的解释2.3相关例题3尾数的......