平滑升级Nginx必须先备份旧二进制文件,如sudo mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old,并验证其可执行性;同时记录nginx -V输出的编译参数、pid路径,备份配置与SELinux上下文以保障回滚可靠。

源码编译升级 Nginx 时,保留旧版本二进制文件是平滑升级的关键前提——它不是可选项,而是回滚能力的唯一保障。核心动作就一条:在替换前,用 mv 或 cp 把正在运行的 nginx 二进制文件复制或重命名备份,且必须确保路径、权限、属主完全一致。
确认当前 nginx 二进制位置和运行状态
先查清楚你正在用的是哪个文件:
- 运行
ps aux | grep nginx看 master 进程启动路径(如/usr/sbin/nginx或/usr/local/nginx/sbin/nginx) - 执行
nginx -V 2>&1 | grep "configure arguments"记录编译参数,后续编译新版本要用到 - 检查 pid 文件位置:
nginx -V 2>&1 | grep "pid ",例如pid /run/nginx.pid;,后面发信号依赖这个
执行安全备份(推荐 mv 方式)
用 mv 比 cp 更稳妥,避免因覆盖失败导致误删:
- 如果 nginx 安装在系统路径:
sudo mv /usr/sbin/nginx /usr/sbin/nginx.old - 如果安装在自定义路径(如 /usr/local/nginx):
sudo mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old - 备份后立刻验证:运行
/usr/sbin/nginx.old -V(或对应路径),确认输出正常、版本正确
补充建议:带时间戳的归档备份
生产环境建议多留一份带日期的副本,便于长期追溯:
sudo cp /usr/sbin/nginx.old /usr/sbin/nginx.bak.$(date +%Y%m%d_%H%M)- 同时备份配置目录:
sudo cp -r /etc/nginx /etc/nginx.bak.$(date +%Y%m%d) - 把旧版编译信息也存下来:
sudo nginx -V > /root/nginx-old-info-$(date +%Y%m%d).txt
注意权限与 SELinux(如有)
备份后的文件默认继承原文件权限,但需额外留意:
- 检查
ls -l /usr/sbin/nginx.old,确保属主为 root、权限为-rwxr-xr-x - 若系统启用 SELinux,执行
sudo restorecon -v /usr/sbin/nginx.old恢复安全上下文,否则回滚时可能启动失败


















