主要场景是,对 nginx 本体进行升级,但不想让应用因此阻塞。
热升级流程
- 将旧的 nginx 文件替换成新的 nginx 文件(更新版本内容)
- 向 Master Process 发送 USR2 信号(启动新版本 nginx,旧 nginx 尚在)
- Master Process 修改 pid 文件,加后缀 .oldbin
- Master Process 用新的 nginx 文件启动新 Master Process
- 收尾工作(确认新版本的 nginx 进程是否可以代替旧 nginx 进程)
- 确认升级:向旧的 Master Process 发送 WINCH 信号,旧的 Worker 子进程退出
- 进程回滚:向旧 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 一并退出,如果后续出现回滚的需求则无法满足