在 Ubuntu 上升级 Nginx 的实用步骤
一 升级前准备
- 备份关键数据与配置:建议先备份 /etc/nginx 与站点数据目录(如 /var/www),以便出现问题时快速恢复。
- 查看当前版本与编译参数:执行 nginx -V(注意是大写 V),记录版本号与 configure arguments,后续无论是 APT 升级还是编译升级,都便于核对差异与一致性。
- 选择升级策略:
- 使用 APT 官方仓库(稳定版或主线版)进行升级,适合大多数场景;
- 若此前是源码编译安装,可采用平滑升级(不中断服务)或重装方式。
二 方法一 使用 Nginx 官方 APT 仓库升级(推荐)
- 安装必要工具并导入签名密钥:
- 安装工具:sudo apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring
- 导入密钥:
- curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
- 验证指纹应包含:573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62
- 添加官方仓库(二选一):
- 稳定版: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 “deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/mainline/ubuntu $(lsb_release -cs) nginx” | sudo tee /etc/apt/sources.list.d/nginx.list
- 设置仓库优先级(优先使用官方包):
- echo -e “Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n” | sudo tee /etc/apt/preferences.d/99nginx
- 执行升级与验证:
- 更新索引:sudo apt update
- 执行升级:sudo apt install nginx(或 sudo apt upgrade nginx)
- 验证版本:nginx -v 或 nginx -V
- 重启服务:sudo systemctl restart nginx
- 可选:检查状态 sudo systemctl status nginx
三 方法二 源码编译安装的平滑升级(不停机)
- 准备新版本:
- 查看旧版参数:/usr/local/nginx/sbin/nginx -V
- 下载并解压新版本,进入目录后使用与旧版一致的 configure 参数执行:
- ./configure [旧参数]
- 仅编译:make(不要 make install)
- 替换二进制并验证:
- 备份旧二进制:cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
- 复制新二进制:cp -f objs/nginx /usr/local/nginx/sbin/nginx
- 语法检查:/usr/local/nginx/sbin/nginx -t
- 平滑切换(不中断服务):
- 启动新 master:kill -USR2 $(cat /usr/local/nginx/logs/nginx.pid)(旧 pid 文件会变为 nginx.pid.oldbin)
- 优雅停用旧 worker:kill -WINCH $(cat /usr/local/nginx/logs/nginx.pid.oldbin)
- 确认新版本正常后退出旧 master:kill -QUIT $(cat /usr/local/nginx/logs/nginx.pid.oldbin)
- 回滚(如异常):
- 快速回退二进制:cp /usr/local/nginx/sbin/nginx.old /usr/local/nginx/sbin/nginx
- 重载:/usr/local/nginx/sbin/nginx -s reload
- 提示:若使用 systemd 管理自编译 Nginx,需确保 /lib/systemd/system/nginx.service 中的 PIDFile 与 nginx.conf 一致;不一致时修正后执行 sudo systemctl daemon-reload。
四 常见问题与回滚建议
- 配置与二进制不匹配:升级后用 nginx -t 做语法检查,必要时从备份 /etc/nginx 恢复配置后再重启。
- 端口或权限问题:检查 /lib/systemd/system/nginx.service 的 PIDFile 与 nginx.conf 一致;修正后 daemon-reload 再启动。
- 升级后新增默认站点:若 /etc/nginx/conf.d/default.conf 是新生成的,可按需删除或改名,避免与现有站点冲突。
- 回滚策略:
- APT 场景:使用 sudo apt install nginx=<旧版本> 降级,或先 sudo apt remove nginx 再安装指定版本;
- 源码场景:按上文“回滚”步骤恢复旧二进制并 reload。