nginx 做传统升级(停机升级/冷升级) 和 平滑升级(热升级/在线升级) 1.20 升级到 1.22 步骤代码

前置准备

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_module
make

一定注意只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 进程

  • 回滚到旧版本,服务不中断

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值