nginx服务器如何升级
小樊
42
2026-01-01 22:57:22
Nginx 服务器升级指南
一 升级总览与准备
- 明确目标:是仅做安全补丁小版本升级,还是跨小版本升级,或需要新增模块(后者通常需源码编译)。
- 备份关键资产:
- 配置与站点:/etc/nginx/(或自定义安装目录的 conf/)
- 日志:/var/log/nginx/
- 静态资源与缓存:如 /var/www/、缓存目录
- 可执行文件与编译参数:备份 /usr/sbin/nginx 或 /usr/local/nginx/sbin/nginx,并执行 nginx -V 保存编译参数,便于复用。
- 检查运行状态与配置:
- 查看状态:systemctl status nginx
- 语法检查:nginx -t
- 选择升级策略:优先使用包管理器的“安装不重启”(升级后生效于下次启动或 reload),或采用平滑升级(不中断现有连接)。
二 方式一 包管理器升级(推荐,简单安全)
- Ubuntu/Debian 使用官方源(示例):
- 导入签名与源、设置高优先级,确保来自 nginx.org 的包优先:
- curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg
- echo “deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu $(lsb_release -cs) nginx” | sudo tee /etc/apt/sources.list.d/nginx.list
- echo -e “Package: *\nPin: origin nginx.org\nPin-Priority: 900” | sudo tee /etc/apt/preferences.d/99nginx
- 执行升级:
- sudo apt update
- sudo apt install nginx
- 验证:nginx -v;如需立即生效且不中断现有连接:nginx -t && sudo nginx -s reload
- CentOS/RHEL 系列:
- 建议使用 EPEL 或 Nginx 官方仓库,执行:sudo yum install nginx 或 sudo dnf install nginx,随后 nginx -t && sudo systemctl reload nginx。
- 适用场景:常规小版本升级、无需新增模块;升级后新进程将在下次启动或 reload时生效,业务连接不断。
三 方式二 平滑升级(源码编译,零停机)
- 适用场景:需要在运行中替换二进制、或新增/变更模块且要求不中断业务。
- 步骤:
- 备份与参数复用:
- 备份二进制与配置;执行 nginx -V 保存原有 configure arguments。
- 编译新版本(只编译不安装):
- 下载并解压新版本源码,进入目录后执行:
- ./configure [复用原有参数]
- make(不要 make install)
- 替换二进制并验证:
- 备份旧二进制:mv /usr/sbin/nginx /usr/sbin/nginx.old(路径以实际环境为准)
- 拷贝新二进制:cp objs/nginx /usr/sbin/nginx
- 语法检查:nginx -t
- 热升级流程(不中断连接):
- 启动新 master:kill -USR2 $(cat /run/nginx.pid)(旧 master 的 pid 文件会被重命名为 nginx.pid.oldbin)
- 优雅关闭旧 worker:kill -WINCH $(cat /run/nginx.pid.oldbin)(旧进程不再接收新连接,处理完存量后退出)
- 验证新版本:curl -I http://localhost 或查看进程 ps aux | grep nginx
- 确认无误后收尾:kill -QUIT $(cat /run/nginx.pid.oldbin)(彻底退出旧 master)
- 异常回滚(随时可执行):
- 让旧 master 重新拉起 worker:kill -HUP $(cat /run/nginx.pid.oldbin)
- 退出新 master:kill -QUIT $(cat /run/nginx.pid)
- 关键点:新旧二进制路径一致、编译参数一致(尤其是 –prefix、模块列表)、按信号顺序执行。
四 验证与回滚
- 版本与进程核验:
- 版本:nginx -v;完整参数:nginx -V
- 进程:确认新 master/worker 存在,旧 master 已退出(或已回滚)
- 业务与连通性:
- 访问与头部:curl -I http://localhost 或 curl -I https://localhost -k
- 日志排查:tail -f /var/log/nginx/error.log
- 回滚要点:
- 包管理器场景:直接降级包版本并 reload 即可。
- 平滑升级场景:按“HUP 旧 master → QUIT 新 master”流程回滚,再验证。
五 注意事项与常见问题
- 编译升级时不要直接 make install,以免覆盖配置;应先 make,替换二进制后用 nginx -t 验证,再按信号完成切换。
- 平滑升级依赖 USR2/WINCH/QUIT/HUP 信号顺序;若新版本异常,优先回滚再排查。
- 新增模块必须基于当前版本的原有编译参数追加(如 –add-module=…),保持路径与模块一致性。
- 建议于低峰时段操作,提前准备回滚方案与监控告警。