Nginx 版本升级:普通升级(冷)与平滑升级(热)---企业场景实战 企业需求公司要求将 Nginx 升级到指定版本1.20.2升级到1.22.0分别采用冷升级停止服务后升级和热升级平滑升级不中断现有连接两种方式实施并验证升级结果及网站访问是否正常。升级原因由于旧版本1.20有漏洞漏洞如下CVE-2022-41741 MP4 模块内存损坏 可能导致工作进程崩溃CVE-2022-41742 MP4 模块内存信息泄露 可能泄露部分内存数据CVE-2021-23017 DNS 解析器内存覆盖 可能造成内存损坏现在升级到1.22.0 问题解决一、前期准备冷 / 热升级共用1. 备份①查看旧nginx编译参数/usr/local/nginx/sbin/nginx -V②备份旧二进制程序cp /usr/local/nginx/sbin/nginx③备份nginx全部配置目录/usr/local/nginx/sbin/nginx.1.20.2.bak2. 准备新版本①新版本②解包③编译cd nginx-1.22.0./configure \ --prefix/usr/local/nginx --with-http_stub_status_module --with-http_gzip_static_module --add-module/opt/nginx-module-vts-master --with-http_ssl_module3. 编译只 make不要 make install方案一冷升级停机升级简单业务中断1. 停止当前 Nginx 服务/usr/local/nginx/sbin/nginx -s stop2. 用编译好的新版本二进制覆盖旧程序cp objs/nginx /usr/local/nginx/sbin/nginx3. 校验配置语法/usr/local/nginx/sbin/nginx -t4. 启动 Nginx/usr/local/nginx/sbin/nginx5. 验证①查看版本确认升级成功/usr/local/nginx/sbin/nginx -v②浏览器访问网站确认页面正常netstat 查看80/443端口监听正常6.冷升级回滚nginx -s stopcp /usr/local/nginx/sbin/nginx.1.20.2.bak /usr/local/nginx/sbin/nginx/usr/local/nginx/sbin/nginx -v方案二热平滑升级不中断现有连接生产推荐1. 确认当前 nginx 运行拿到 master 主进程 PIDps aux | grep nginx # 找到 nginx: master process 的PID是 374672. 覆盖 nginx 二进制程序替换成 1.22.0cp /opt/nginx-1.22.0/objs/nginx /usr/local/nginx/sbin/nginx3. 向 nginx master 进程发送 USR2 信号启动新版本 worker 进程kill -USR2 374674. 向旧 master 发送 WINCH 信号优雅关闭旧的 worker 进程kill -WINCH 374675. 可选保留旧 master 用于回滚等业务观察一段时间稳定后如果确认没问题可以发送QUIT关闭旧 master 进程kill -QUIT 374676.验证①查看nginx版本/usr/local/nginx/sbin/nginx -v②查看监听端口netstat -tlnp | grep nginx