reload背后的步骤
- 向master进程发送HUP信号(使用reload命令)
- master进程校验配置语法是否正确
- master进程打开新的监听端口 - -可能新的配置文件引入了新的配置端口
- master进程用新配置启动新的worler子进程
- master进程向老的worker进程发送QUIT信号
- 老的worker进程关闭监听句柄,等待当期链接处理完毕后,结束进程
热升级的步骤 不停机更新
- 将旧的nginx文件替换成新的nginx文件 ,备份旧文件(binary)
- 向master进程发送USR2信号,关闭老服务的worker进程
- master进程修改pid文件名,加上后缀 .oldbin
- master进程用新的nginx文件启动新的master进程
---以下确保新的nginx服务没问题时,关闭老的master进程- 向老的master发送QUIT信号,关闭老的master进程
---当发送问题时,使用这个步骤,回退至老版本- 回退:向老master发送HUP信号,向新master发送QUIT信号
优雅的关闭worker进程
针对的是HTTP,https请求,worker进程无法判断TCP,或者UDP层,数据的传输是否完成,还有websocket报文是否发送完毕,所以对于TCP,UDP,websocket是无法优雅关闭的。
- 设置定时器, 即设置 worker_shutdown_timeout = XX
- 关闭监听句柄
- 关闭空闲链接
- 在循环中等待链接关闭 --(在定时器超时时,直接关闭,则只有一半的优雅关闭) 时间比较长
- 退出进程
网友评论