在 Ubuntu 上升级 Nginx 的推荐做法
一 准备与版本确认
- 查看当前版本与编译参数:nginx -V(含 OpenSSL、模块等,便于升级后核对)。
- 备份关键配置与目录:/etc/nginx/(站点、SSL、流控等),以及可能的二进制或自定义目录(如 /usr/local/nginx/)。
- 规划升级策略:选择 稳定版 stable 或 主线版 mainline;主线版包含更多新特性但可能变更更频繁。
二 方法一 使用 Nginx 官方 APT 源升级(推荐)
- 安装必要工具并导入官方签名密钥:
- sudo apt update && sudo apt install -y 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
- 验证密钥指纹应包含:573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62
- 添加官方仓库(二选一):
- 稳定版: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” | sudo tee /etc/apt/preferences.d/99nginx
- 执行升级与重启:
- sudo apt update && sudo apt install --only-upgrade nginx
- sudo systemctl restart nginx
- 验证:nginx -v 与 nginx -V 查看版本与编译参数是否更新。
三 方法二 仅用系统源或遇到 GPG 错误的处理
- 系统源直接升级(可能版本较旧):sudo apt update && sudo apt install --only-upgrade nginx。若版本未变化,说明系统源未提供更新版本。
- 旧版 APT 密钥导入方式(若使用较早教程):出现 NO_PUBKEY 时执行
- apt-key adv --recv-key --keyserver keyserver.ubuntu.com ABF5BD827BD9BF62
- 然后 sudo apt update。当前更推荐使用 signed-by + keyring 方式。
四 方法三 从源码编译升级(不替换系统包,适合高级场景)
- 安装编译依赖:sudo apt install -y gcc libpcre3-dev zlib1g-dev make
- 下载并编译新版本(示例为 1.20.2,可按需替换版本):
- wget https://nginx.org/download/nginx-1.20.2.tar.gz
- tar xvf nginx-1.20.2.tar.gz && cd nginx-1.20.2
- ./configure --prefix=/usr/local/nginx # 可按需添加模块
- make && sudo make install
- 热升级(不中断服务):
- 备份旧二进制:sudo cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
- 替换二进制:sudo cp -f objs/nginx /usr/local/nginx/sbin/nginx
- 获取旧 master PID:ps -ef | grep nginx(假设为 15191)
- 执行热升级:kill -USR2 15191;kill -WINCH 15191
- 验证:/usr/local/nginx/sbin/nginx -v 查看已升级;确认无误后可优雅关闭旧进程:kill -QUIT 旧PID。
五 回滚与验证
- 回滚 APT 安装:sudo apt install --allow-downgrades nginx=旧版本号(版本号可用 apt-cache madison nginx 查询)。
- 回滚源码热升级:将 /usr/local/nginx/sbin/nginx.old 复制回 /usr/local/nginx/sbin/nginx,并向旧 master 发送 HUP 重新加载配置,或按需停止新 master、恢复原二进制。
- 升级后核对:
- 进程与端口:systemctl status nginx;ss -lntp | grep :80|:443
- 版本与编译参数:nginx -v、nginx -V
- 配置语法:sudo nginx -t
- 业务验证:访问站点与关键接口,检查 SSL/TLS、反向代理、负载均衡与日志是否正常。