6.reload重载的背后和热升级nginx,优雅关闭worker进程

reload背后的步骤
  1. 向master进程发送HUP信号(使用reload命令)
  2. master进程校验配置语法是否正确
  3. master进程打开新的监听端口 - -可能新的配置文件引入了新的配置端口
  4. master进程用新配置启动新的worler子进程
  5. master进程向老的worker进程发送QUIT信号
  6. 老的worker进程关闭监听句柄,等待当期链接处理完毕后,结束进程
热升级的步骤 不停机更新
  1. 将旧的nginx文件替换成新的nginx文件 ,备份旧文件(binary)
  2. 向master进程发送USR2信号,关闭老服务的worker进程
  3. master进程修改pid文件名,加上后缀 .oldbin
  4. master进程用新的nginx文件启动新的master进程
    ---以下确保新的nginx服务没问题时,关闭老的master进程
  5. 向老的master发送QUIT信号,关闭老的master进程
    ---当发送问题时,使用这个步骤,回退至老版本
  6. 回退:向老master发送HUP信号,向新master发送QUIT信号
优雅的关闭worker进程

针对的是HTTP,https请求,worker进程无法判断TCP,或者UDP层,数据的传输是否完成,还有websocket报文是否发送完毕,所以对于TCP,UDP,websocket是无法优雅关闭的。

  1. 设置定时器, 即设置 worker_shutdown_timeout = XX
  2. 关闭监听句柄
  3. 关闭空闲链接
  4. 在循环中等待链接关闭 --(在定时器超时时,直接关闭,则只有一半的优雅关闭) 时间比较长
  5. 退出进程

你可能感兴趣的:(6.reload重载的背后和热升级nginx,优雅关闭worker进程)