nginx工作原理详解

一、Nginx请求处理流程

在这里插入图片描述
图解:
进入nginx的大致三种流量:WEB、EMAIL及TCP
Nginx中三个状态机:

  • 传输层状态机:处理TCP/UDP四层传输层
  • HTTP状态机:处理应用层
  • MAIL状态机:处理邮件

状态机作用:Nginx采用epoll异步非阻塞事件驱动处理引擎,需要状态机识别和处理请求,将解析出来的请求引导到静态资源或磁盘缓存(做反向代理时)。
当静态资源太多,内存不足以缓存时,磁盘调用会退化成阻塞调用,所以我们使用线程池来处理。
线程池详解
总的来说:线程池就是一个单独的处理机制,所有的worker进程处理起来耗时的任务都会交给他,他处理完之后返回结果。worker进程不需要等待,客户端等待就行。
对每一个处理完成的请求会记录Access访问日志和Error错误日志(记录到磁盘中的)。
nginx作反向代理时可以使用应用层协议HTTP、FastCGI等将请求代理到其他服务器。

二、nginx的进程结构

在这里插入图片描述nginx中有Master进程和child进程。child进程分为两类:worker进程和cache进程。

为什么nginx采用多进程结构而不是多线程结构?
nginx目的:保持高可用性和高可靠性。
如果采用多线程模型,线程之间共享地址空间,如果某个第三方模块引发地址空间导致的段错误时,在地址越界出现时,会导致整个nginx全部挂掉。而多进程就不会出现这种问题。

进程作用
master进程:负责监控每个worker进程工作状态。
worker进程:处理请求。缓存需要在多个worker之间进行共享。
Cache manager:做反向代理时为后端发来的动态请求做缓存使用的。做缓存管理。
Cache loader:做反向代理时为后端发来的动态请求做缓存使用的。做缓存载入。
进程间的通信方式:共享内存。

为什么有多个worker进程?
nginx采用事件驱动模型,希望每个worker进程从头到尾占有一个cpu。我们需要将worker进程数配置成与cpu核数相同的同时将每一个worker和一个cpu绑定在一起。这样可以更好的使用每一个cpu核上的cpu缓存来减少缓存失效的命中率。

nginx -s reload
kill -SIGHUP 父进程id

会将老的子进程(worker和cache进程)优雅的退出,加载配置文件,启动新的子进程。

kill -SIGTERM  子进程id

子进程退出告知父进程,父进程会重新起一个子进程,维持原有worker数量。

三、Nginx进程管理:信号

在这里插入图片描述
解析:
子进程终止时会给父进程发送CHLD信号,如果worker进程由于某些bug意外终止,master进程会立马发现并拉起worker进程。

通过nginx命令行方式发送信号:
TERM,INT:立刻停止nginx进程
QUIT:优雅停止nginx
HUP:重载配置文件
USR1:重新打开日志文件,做日志文件切割

专门针对做热部署时使用,只能通过kill(linux命令行)发送信号:
USR2
WINCH

四、reload重载配置文件的真相

reload流程:
1、向master进程发送HUP信号(reload命令)
2、master进程校验配置语法是否正确(nginx -t)
3、master进程打开新的监听端口(子进程会继承所以master打开的端口,我们可能引入了新的监听端口)
4、master进程用新配置启动新的worker子进程
5、master进程向老worker子进程发生QUIT信号
6、老worker进程关闭监听句柄,处理完当前连接后结束进程

在这里插入图片描述
Master进程启动新的子进程时会加一个定时器worker_shutdown_timeout,定时器到时后会立刻强制退出还未退出的老worker进程。

六、热升级流程

1、将旧nginx文件替换成新nginx文件
2、向老master进程发送USR2信号
3、master进程修改pid文件名,加后缀.oldbin(保存老pid文件)
4、master进程用新nginx文件启动新master进程。(目前为止有两个master进程)
5、向老master进程发送WINCH信号,关闭老worker
6、回滚:向老master发送HUP,向新master发送QUIT。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值