插件窝 干货文章 nginx运维中如何平滑升级

nginx运维中如何平滑升级

Nginx 版本 升级 bash 936    来源:    2025-04-25

Nginx平滑升级指南

平滑升级Nginx可以在不中断服务的情况下完成版本更新,这对于生产环境至关重要。以下是详细的操作步骤:

准备工作

  1. 备份配置:先备份当前的nginx配置文件和重要数据

    cp -r /etc/nginx /etc/nginx_backup
    cp /usr/sbin/nginx /usr/sbin/nginx.old
    
  2. 下载新版本:从Nginx官网下载所需版本

    wget https://nginx.org/download/nginx-x.x.x.tar.gz
    tar zxvf nginx-x.x.x.tar.gz
    cd nginx-x.x.x
    

编译安装新版本

  1. 配置编译参数(使用与旧版本相同的参数)

    nginx -V  # 查看旧版本的编译参数
    ./configure [旧版本的配置参数] --with-http_stub_status_module --with-http_ssl_module
    
  2. 编译但不安装

    make
    

执行平滑升级

  1. 替换二进制文件

    mv /usr/sbin/nginx /usr/sbin/nginx.old
    cp objs/nginx /usr/sbin/nginx
    
  2. 测试新版本配置

    nginx -t
    
  3. 发送USR2信号给主进程(通知Nginx准备升级)

    kill -USR2 `cat /var/run/nginx.pid`
    
  4. 发送WINCH信号给旧主进程(优雅关闭旧worker进程)

    kill -WINCH `cat /var/run/nginx.pid.oldbin`
    
  5. 验证升级:检查日志和进程状态

    ps -ef | grep nginx
    tail -f /var/log/nginx/error.log
    

升级后处理

  1. 如果升级成功,可以关闭旧的主进程:

    kill -QUIT `cat /var/run/nginx.pid.oldbin`
    
  2. 如果升级失败,可以回滚:

    kill -HUP `cat /var/run/nginx.pid.oldbin`  # 重启旧worker进程
    kill -QUIT `cat /var/run/nginx.pid`       # 关闭新主进程
    mv /usr/sbin/nginx.old /usr/sbin/nginx    # 恢复旧二进制文件
    

注意事项

  1. 确保新旧版本的配置兼容
  2. 升级前检查新版本的变更日志,了解可能的破坏性变更
  3. 建议先在测试环境验证升级过程
  4. 对于重大版本升级(如1.x到2.x),可能需要更谨慎的测试

通过这种平滑升级方式,Nginx可以在不中断现有连接的情况下完成版本更新,确保服务连续性。