主要场景是,对 nginx 本体进行升级,但不想让应用因此阻塞。

热升级流程

  1. 将旧的 nginx 文件替换成新的 nginx 文件(更新版本内容)
  2. 向 Master Process 发送 USR2 信号(启动新版本 nginx,旧 nginx 尚在)
    1. Master Process 修改 pid 文件,加后缀 .oldbin
    2. Master Process 用新的 nginx 文件启动新 Master Process
  3. 收尾工作(确认新版本的 nginx 进程是否可以代替旧 nginx 进程)
    1. 确认升级:向旧的 Master Process 发送 WINCH 信号,旧的 Worker 子进程退出
    2. 进程回滚:向旧 Master Process 发送 HUP,并向新 Master Process 发送 QUIT

**

疑问

**

1. 热升级与热更新的差异是什么?

前者是对 nginx 升级,后者是对配置进行更新
前者替换的是 Master Process,后者替换的是 Worker Process

2. 为什么退出旧的 Master Process,使用的是 WHICH 而不是 QUIT?

WHICH 仅退出旧的 Master Process 下的 Worker Process,为了防止新的请求被旧的 Worker Process 处理
而 QUIT 是将 Master Process 和 Worker Process 一并退出,如果后续出现回滚的需求则无法满足

3. 如果仅 USR2 不 WHICH,那两个都能处理请求的 nginx 会发生什么?