温馨提示×

如何用Ubuntu升级Nginx版本

小樊
40
2025-12-30 18:21:10
栏目: 智能运维

在 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 -vnginx -V
    • 配置语法:sudo nginx -t
    • 业务验证:访问站点与关键接口,检查 SSL/TLS、反向代理、负载均衡与日志是否正常。

0