1⃣️ nginx进程结构
nginx是多进程结构模型,由master作为父进程,启动多个子进程,通过信号管理。
-
Master进程
<< 监控worker进程:CHLD(子进程终止的时候会向父进程发送CHLD信号,Master进程接受后可以立刻拉起wroker进程)
<<管理worker进程,可以接受的信号
****TERM,INT : 立刻停止
****QUIT :优雅停止
****HUP :从载配置文件
****USR1 :从新打开日志文件
****USR2 :平滑升级可执行程序
****WINCH :从容关闭工作进程 -
Worker进程
Worker进程也可以接受上面4个进程,一般都是对Master进程发送信号,Master进程再向Worker进程发送信号 -
nginx命令行(各命令对应的信号)
reload:HUP(用kill直接发送信号)
reopen:USR1
stop:TERM
quit:QUIT
?nginx的Master进程的PID会记录在logs目录的nginx.pid文件中。
?worker进程优雅的关闭,主要针对的是HTTP请求。代理websocker协议,TCP,UDP层的时候不能优雅推出。
- 设置定时器 worker_shutdown_timeout
- 关闭监听句柄 :保证要关闭的进程不再处理新的连接
- 关闭空闲连接 :为了利用最大化,会保存一些空闲的连接,这时会被关闭。
- 在循环中等待全部连接关闭:每发现一个请求处理完毕就会把这个连接关闭。超过设置的worker_shutdown_timeout的时间,会立即退出。
- 退出进程
2⃣️ Nginx Reload流程
不停止服务,平滑升级。
3⃣️ 热升级流程
只替换binary文件。
老的Master进程一直存在。