温馨提示×

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 系列:
    • 建议使用 EPELNginx 官方仓库,执行:sudo yum install nginx 或 sudo dnf install nginx,随后 nginx -t && sudo systemctl reload nginx
  • 适用场景:常规小版本升级、无需新增模块;升级后新进程将在下次启动或 reload时生效,业务连接不断。

三 方式二 平滑升级(源码编译,零停机)

  • 适用场景:需要在运行中替换二进制、或新增/变更模块且要求不中断业务
  • 步骤:
    1. 备份与参数复用:
      • 备份二进制与配置;执行 nginx -V 保存原有 configure arguments
    2. 编译新版本(只编译不安装):
      • 下载并解压新版本源码,进入目录后执行:
        • ./configure [复用原有参数]
        • make(不要 make install)
    3. 替换二进制并验证:
      • 备份旧二进制:mv /usr/sbin/nginx /usr/sbin/nginx.old(路径以实际环境为准)
      • 拷贝新二进制:cp objs/nginx /usr/sbin/nginx
      • 语法检查:nginx -t
    4. 热升级流程(不中断连接):
      • 启动新 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)
    5. 异常回滚(随时可执行):
      • 让旧 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://localhostcurl -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=…),保持路径与模块一致性。
  • 建议于低峰时段操作,提前准备回滚方案监控告警

0