前置准备
1. 检查当前环境
# 查看当前 Nginx 版本 nginx -v
![]()
2. 备份当前配置和数据
# 备份配置文件 cp -r /usr/local/nginx/conf /usr/local/nginx/conf_backup_$(date +%Y%m%d)
方式一:冷升级(停机升级)
特点:需要停止服务,升级期间网站无法访问。适合维护窗口期。
步骤 1:停止当前 Nginx 服务
# 方式1:使用 nginx 命令停止 nginx -s stop

步骤 2:解压 Nginx 1.22 源码包
# 进入存放包的目录 cd /opt/# 解压源码包 tar -zxvf nginx-1.22.0.tar.gz# 进入解压后的目录 cd nginx-1.22.0
![]()
步骤 3:编译 Nginx 1.22
# 配置编译选项(使用之前记录的编译参数) ./configure --prefix=/usr/local/nginx \ --with-http_ssl_module \ --with-http_stub_status_module \ --with-http_realip_module \ --with-http_gzip_static_module \# 编译&&安装make&&make install
步骤 4:启动新版本 Nginx
# 启动nginx systemctl start nginx# 验证版本 nginx -v

步骤 5:测试验证
# 检查进程 ps aux | grep nginx | grep -v grep# 检查端口监听 ss -tlnp | grep 80# 访问测试 curl -I http://服务器IP



方式二:热升级(平滑升级/在线升级)
特点:服务不中断,新旧版本交替运行,适合生产环境。
步骤 1:解压并编译 Nginx 1.22
# 进入存放包的目录 cd /opt/# 解压 tar -zxvf nginx-1.22.0.tar.gz cd nginx-1.22.0# 编译(不安装) ./configure --prefix=/usr/local/nginx \ --with-http_ssl_module \ --with-http_stub_status_module \ --with-http_realip_module \ --with-http_gzip_static_modulemake一定注意只make(编译)不makeinstall(安装)
含义:只执行 make 不执行 make install,生成新的 nginx 可执行文件但先不覆盖旧版本。
步骤 2:备份旧版本的 nginx 二进制文件
# 备份旧的 nginx 可执行文件 cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old# 查看备份 ls -la /usr/local/nginx/sbin/

含义:备份旧的二进制文件,方便在升级失败时快速回滚。
步骤 3:替换为新版本的二进制文件
# 复制新编译的 nginx 到安装目录 cp -f /opt/nginx-1.22.0/objs/nginx /usr/local/nginx/sbin/nginx # 确认版本 nginx -v

含义:cp -f 强制覆盖旧文件。此时新的二进制文件已就位,但旧的进程还在运行。
步骤 4:平滑升级(发送信号)
# 获取当前 nginx 主进程 PID ps aux | grep "nginx: master" | grep -v grep# 假设 PID 是 27495,向旧主进程发送 USR2 信号 kill -USR2 27495# 查看新进程是否启动(会有新的 master 和 worker 进程) ps aux | grep nginx | grep -v grep

含义:
-
-USR2:告诉旧主进程启动新版本的主进程(新老并存) -
新主进程会继承旧主进程的配置和监听端口
步骤 5:优雅关闭旧的 worker 进程
# 向旧主进程发送 WINCH 信号,关闭旧的 worker 进程 kill -WINCH 27495 # 查看进程状态,应该只剩新的 worker 在运行 ps aux | grep nginx | grep -v grep

含义:
-
-WINCH:告诉旧主进程关闭它的所有 worker 进程(但旧主进程还在) -
此时所有请求由新版本处理,旧进程只作为备份
步骤 6:验证新版本运行正常
# 测试网站访问 curl -I http://localhost # 检查日志是否有错误 tail -f /usr/local/nginx/logs/error.log

步骤 7:完全切换到新版本
# 向旧主进程发送 QUIT 信号,彻底退出 kill -QUIT 27495 # 确认只剩新版本的进程 ps aux | grep nginx | grep -v grep # 确认版本 nginx -v

含义:-QUIT 让旧主进程优雅退出,完成升级。
步骤 8:如果升级失败的回滚操作
如果在步骤 4-6 中发现问题,可以快速回滚:
# 恢复旧版本二进制文件 cp /usr/local/nginx/sbin/nginx.old /usr/local/nginx/sbin/nginx # 向旧主进程发送 HUP 信号,重新加载配置 kill -HUP 12345 # 杀死新版本进程 kill -TERM 新版本PID
含义:
-
-HUP:让旧主进程重新读取配置并启动新的 worker 进程 -
回滚到旧版本,服务不中断
 和 平滑升级(热升级在线升级) 1.20 升级到 1.22 步骤代码&spm=1001.2101.3001.5002&articleId=163373076&d=1&t=3&u=2fbd4993c10e489e952ef285142621cf)
250

被折叠的 条评论
为什么被折叠?



