Nginx的升级

前言

在服务器运维工作中,Nginx 作为高性能的 Web 服务器和反向代理,其版本更新不仅能修复已知漏洞、提升稳定性,还可能带来新的功能特性。但升级过程中如何保障业务不中断?本文将详细对比 普通升级 与 平滑升级 两种方案,从原理、操作步骤到注意事项,带你完整掌握 Nginx 版本升级流程。

目录

前言

1.普通升级

2.平滑升级


1.普通升级

1. 升级前必做:备份旧版本

cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old.1.12.2

2. 停止旧版本服务

/usr/local/nginx/sbin/nginx -s quit.

. 3.编译新版本

cd /usr/local/src

tar -zxvf nginx-1.22.0.tar.gz

cd nginx-1.22.0

# 配置(必须与旧版本参数一致!)

./configure --prefix=/usr/local/nginx --with-http_ssl_module

# 编译(注意:只 make,千万不要 make install!)

make

4. 替换二进制文件

cp objs/nginx /usr/local/nginx/sbin/nginx

5. 启动新版本并验证

/usr/local/nginx/sbin/nginx

/usr/local/nginx/sbin/nginx -v # 应显示 1.22.0

2.平滑升级

确认当前是原生启动的

ps -ef | grep nginx

编译目标版本

cd /usr/local/src/nginx-1.12.2

make

备份当前二进制文件

cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old.1.22.0

替换新版本二进制文件

cp -f objs/nginx /usr/local/nginx/sbin/nginx

校验配置兼容性

/usr/local/nginx/sbin/nginx -t

执行平滑升级

kill -USR2 $(cat /usr/local/nginx/logs/nginx.pid)

#启动新 Master 进程

#此时执行 ps -ef | grep nginx,你会看到两个 master process

kill -WINCH $(cat /usr/local/nginx/logs/nginx.pid.oldbin)

#关闭旧 Worker 进程

kill -QUIT $(cat /usr/local/nginx/logs/nginx.pid.oldbin)

#彻底退出旧 Master 进程

最终验证

/usr/local/nginx/sbin/nginx -v