Nginx进程架构:
为了高可用和高可靠的目的,采用多进程结构(若使用多线程,出现段错误时会导致进程奔溃),Worker进程是真正处理请求的,Master进程监控Worker进程工作情况;进程间的通信是使用共享内存实现的,父子进程之间是通过信号进行管理的。
Nginx进程管理:信号
调用Nginx发送相应的命令和使用kill直接发送信号的结果是一样的;
reload流程:
- 向master发送HUP信号(reload命令)
- master进程检验配置语法是否正确
- master进程打开新的监听端口
- master进程用新的配置文件启动新的worker子进程(新老worker并存)
- master进程向老的worker子进程发送QUIT信号(优雅地关闭)
- 老的worker子进程关闭监听句柄(不处理新的连接),处理完当前进程后结束进程
热升级流程:
- 将旧的Nginx文件换成新的Nginx文件(注意备份)
- 向master进程发送USR2信号
- master进程修改pid文件名,加后缀.oldbin
- master进程用新的Nginx文件启动新的master进程(子进程)
- 向老master进程发送QUIT信号,关闭老的master进程
- 回滚:向老的master进程发送HUP,向新的master进程发送QUIT
worker进程:优雅地关闭(主要针对http请求)
- 设置定时器:worker_shutdown_timeout
- 关闭监听句柄,不处理新的连接
- 关闭空闲连接
- 在循环中等待全部连接关闭(若超出worker_shutdown_timeout立即停止)
- 退出进程