前言
在服务器运维工作中,nginx 作为高性能的 web 服务器和反向 代理,其版本更新不仅能修复已知漏洞、提升稳定性,还可能带来新的功能特性。本文介绍了nginx的两种升级方式,分别是普通升级与平滑升级。
一、升级前的准备(两种都需要做)
1.1 确认当前 nginx 信息
# 查看当前 nginx 版本 nginx -v # 完整信息(含编译参数),重点记录 --prefix、--with-xxx 等参数

1.2 查看 nginx 运行状态
# 查看 nginx 运行状态 systemctl status nginx # 系统服务管理(centos/rhel 7+、ubuntu 16.04+)

1.3 下载目标版本 nginx
# 进入源码存放目录(如 /opt) cd /opt/src # 下载源码包 wget https://nginx.org/download/nginx-1.22.0.tar.gz # 解压到指定目录/opt下 tar -zxvf nginx-1.22.0.tar.gz -c /opt cd nginx-1.22.0

1.4 备份关键文件
升级前必须备份 配置文件 和 旧版本二进制文件,防止升级失败后无法回滚
# 备份 nginx 配置文件(默认路径为 --prefix 指定的 conf 目录) cp -r /usr/local/nginx/conf /usr/local/nginx/conf.back # 备份 nginx 日志文件(可选,避免日志丢失) cp -r /usr/local/nginx/logs /usr/local/nginx/logs_back # 备份旧版本二进制文件(后续会用到) mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old


二、传统升级(停止服务升级/冷升级)
2.1 停止当前 nginx 服务
# 通过系统服务停止 systemctl stop nginx # 查看状态 systemctl status nginx

2.2 编译新版本 nginx
# 进入解压后的新版本目录 cd /opt/nginx-1.22.0 # 执行 configure 配置(参数与旧版本保持一致) ./configure \ --prefix=/usr/local/nginx \ # 安装路径(与旧版本相同) --user=nginx \ # 运行用户 --group=nginx \ # 运行用户组 --with-http_stub_status_module \ # 状态监控模块 --with-http_ssl_module # https 模块(若旧版本有则保留) # 编译(无需执行 make install,避免覆盖配置文件) make
2.3 替换二进制文件并启动
# 复制新版本二进制文件到运行目录 cp objs/nginx /usr/local/nginx/sbin/ # 启动新版本 nginx systemctl start nginx

2.4 查看升级后的版本
# 查看版本(应显示目标版本 1.22.0) nginx -v

三、平滑升级(热升级/在线升级)
平滑升级是 nginx 的核心特性之一,其原理是不停止旧版本主进程,通过信号控制逐步替换工作进程。
3.1 核心原理:nginx 信号机制
nginx 主进程(master)通过接收特定信号实现进程管理,平滑升级依赖以下 3 个关键信号:
- usr2:主进程接收到后,会启动一个新版本的主进程,并继承旧版本的监听端口和配置;
- winch:旧版本主进程接收到后,会逐步关闭所有旧版本工作进程(worker);
- quit:优雅关闭主进程(等待所有工作进程结束后退出)
3.2 操作步骤
完成版本确认、源码下载、文件备份和新版本编译(步骤与传统升级的 1~2 一致,确保 make 编译完成)。
3.2.1 复制新版本二进制文件
# 复制新版本二进制文件(同方案) cp /opt/nginx-1.22.0/objs/nginx /usr/local/nginx/sbin/nginx

3.2.2 发送信号启动新版本主进程
先找到旧版本 nginx 主进程的 pid
# 查找旧版本主进程 pid(示例 pid 为 4787) ps -aux | grep nginx

# 发送 usr2 信号,启动新版本主进程 kill -usr2 62379 # 再次查看进程,会发现两个主进程 ps -aux | grep nginx

3.2.3 逐步关闭旧版本工作进程
# 发送 winch 信号给旧版本主进程,关闭旧工作进程 kill -winch 62379 # 查看进程:旧工作进程会逐步退出,仅剩旧主进程(62379)和新主进程+新工作进程 ps -aux | grep nginx

3.2.4 验证新版本
nginx -v

总结
传统升级:服务会短暂中断、适用于非核心业务、测试环境
平滑升级:服务不需要中断、适用于生产环境、核心业务
到此这篇关于nginx升级的两种方式的文章就介绍到这了,更多相关nginx升级内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论