Nginx平滑升级(不停服务)的完整流程
更新时间:2026年06月11日 08:38:58 作者:流烟默
这篇文章主要介绍了Nginx平滑升级实践,从https://nginx.org/en/download.html下载并升级Nginx至最新版本,确保配置正确并平滑升级以避免服务中断,此过程包括解压、备份、编译新版本、平滑升级和验证步骤,需要的朋友可以参考下
从 https://nginx.org/en/download.html 下载最新稳定版本nginx-1.30.2.tar.gz,上传到了 /home/nginx目录下。原服务器Nginx是1.21.6版本,且configure没有模块参数。
configure arguments: 是空白的,说明当时安装时没有加任何模块参数。可以使用-V命令检测参数,如果有参数则需要在configure 时附带。
[root@host nginx]# ./sbin/nginx -V nginx version: nginx/1.21.6 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) configure arguments:
注意:升级后检测是否有worker进程是否存在,如果不存在重新加载:
# 升级完成后 /usr/local/nginx/sbin/nginx -s reload
完整升级步骤
第一步:解压
cd /home/nginx tar -zxvf nginx-1.30.2.tar.gz
第二步:备份当前环境
# 备份配置文件 cp -r /usr/local/nginx/conf /usr/local/nginx/conf.bak.$(date +%Y%m%d) # 备份旧二进制文件 cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak.$(date +%Y%m%d) # 记录旧版本信息 /usr/local/nginx/sbin/nginx -V > /root/nginx_old_info.txt # 确认备份成功 ls -la /usr/local/nginx/conf.bak.$(date +%Y%m%d) ls -la /usr/local/nginx/sbin/nginx.bak.$(date +%Y%m%d)
第三步:编译新版本
# 进入解压目录 cd /home/nginx/nginx-1.30.2 # 清理可能存在的编译残留 make clean 2>/dev/null # 配置编译参数(旧版本没有额外参数,直接默认即可) ./configure # 编译 make
第四步:平滑升级(不中断服务)
# 查看当前 nginx master 进程 PID cat /usr/local/nginx/logs/nginx.pid # 替换二进制文件 cp -f objs/nginx /usr/local/nginx/sbin/nginx # 向 master 进程发送 USR2 信号,启动新版本 worker kill -USR2 $(cat /usr/local/nginx/logs/nginx.pid) # 等待2秒让新进程启动 sleep 2 # 向旧 master 发送 WINCH 信号,优雅关闭旧 worker kill -WINCH $(cat /usr/local/nginx/logs/nginx.pid)
第五步:验证升级结果
# 查看版本号(应显示 1.30.2) /usr/local/nginx/sbin/nginx -V # 测试配置文件语法 /usr/local/nginx/sbin/nginx -t # 查看 nginx 进程 ps aux | grep nginx | grep -v grep # 测试业务是否正常 curl -I http://127.0.0.1 2>/dev/null | head -5
第六步:确认无误后,清理旧进程
# 确认新版本正常工作后,关闭旧 master 进程 kill -QUIT $(cat /usr/local/nginx/logs/nginx.pid.oldbin) # 清理旧 PID 文件 rm -f /usr/local/nginx/logs/nginx.pid.oldbin # 最终确认进程状态 ps aux | grep "nginx:" | grep -v grep
快速回滚方案(如果升级失败)
# 停止当前 nginx /usr/local/nginx/sbin/nginx -s stop # 恢复旧二进制 cp /usr/local/nginx/sbin/nginx.bak.$(date +%Y%m%d) /usr/local/nginx/sbin/nginx # 启动旧版本 /usr/local/nginx/sbin/nginx # 验证 /usr/local/nginx/sbin/nginx -V
一键执行脚本(可选)
你可以将以下内容保存为 upgrade_nginx.sh,然后执行 bash upgrade_nginx.sh:
#!/bin/bash set -e echo "=== 1. 解压 ===" cd /home/nginx tar -zxvf nginx-1.30.2.tar.gz echo "=== 2. 备份 ===" cp -r /usr/local/nginx/conf /usr/local/nginx/conf.bak.$(date +%Y%m%d) cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak.$(date +%Y%m%d) echo "=== 3. 编译 ===" cd /home/nginx/nginx-1.30.2 make clean 2>/dev/null ./configure make echo "=== 4. 平滑升级 ===" cp -f objs/nginx /usr/local/nginx/sbin/nginx kill -USR2 $(cat /usr/local/nginx/logs/nginx.pid) sleep 2 kill -WINCH $(cat /usr/local/nginx/logs/nginx.pid) echo "=== 5. 验证 ===" /usr/local/nginx/sbin/nginx -V /usr/local/nginx/sbin/nginx -t echo "=== 6. 清理旧进程 ===" kill -QUIT $(cat /usr/local/nginx/logs/nginx.pid.oldbin) 2>/dev/null rm -f /usr/local/nginx/logs/nginx.pid.oldbin echo "=== 升级完成 ==="
使用make upgrade替代三个kill
# 1. 进入新版本源码目录 cd /home/nginx/nginx-1.30.2 # 2. 用旧版本的编译参数配置(你的情况是空参数) ./configure # 3. 编译(不要 make install!) make # 4. 备份旧二进制 cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak # 5. 替换二进制文件 cp -f objs/nginx /usr/local/nginx/sbin/nginx # 6. 自动完成平滑升级(这一步替代了你之前所有的 kill 命令) make upgrade # 7. 验证版本 /usr/local/nginx/sbin/nginx -V
以上就是Nginx平滑升级(不停服务)的完整流程的详细内容,更多关于Nginx平滑升级(不停服务)的资料请关注脚本之家其它相关文章!
相关文章
详解Nginx服务器中HTTP Headers相关的模块配置使用
这篇文章主要介绍了详解Nginx服务器中HTTP Headers相关的模块配置使用,包括ngx_http_headers_module与它的增强版ngx_headers_more的配置使用讲解,需要的朋友可以参考下2016-01-01


最新评论