核心说明
Ubuntu 官方源自带 nginx 是 1.18,想要 1.23(属于 mainline 主线版),必须添加 nginx 官方 apt 源;
1.23 是主线版本,官方源 mainline 仓库里才有,stable 稳定源没有 1.23。 ⚠️ 重要:升级前务必备份 /etc/nginx,业务服务器最好先停机维护窗口。
步骤 1:备份配置(必做)
# 备份nginx整个配置目录
sudo cp -r /etc/nginx /etc/nginx.bak.$(date +%Y%m%d)
# 备份nginx二进制(可选)
cp /usr/sbin/nginx ~/nginx-backup
步骤 2:安装依赖,导入 Nginx 官方 GPG 密钥
sudo apt update
sudo apt install curl gnupg2 ca-certificates lsb-release -y
# 导入官方签名密钥
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
步骤 3:添加 mainline 主线源(获取 1.23 版本)
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
如果想要稳定分支(没有 1.23),用下面这条替换上面,这里不要执行:
http://nginx.org/packages/ubuntu
步骤 4:设置包优先级 Pin(强制 apt 优先从 nginx 官方源拉取)
echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \
| sudo tee /etc/apt/preferences.d/99nginx
步骤 5:卸载旧版 1.18(保留配置文件,不加 --purge)
sudo apt remove nginx nginx-common nginx-core -y
# autoremove清理旧依赖
sudo apt autoremove -y
❗ 如果执行
purge会删除全部配置,不要加 --purge,我们已经手动备份过配置。
步骤 6:更新源并安装 nginx(此时可以选 1.23)
sudo apt update
# 查看仓库里有哪些可用版本
apt-cache madison nginx
输出会列出版本,找到 1.23.x,执行指定版本安装:
# 替换成你查到的完整版本号,示例:nginx=1.23.4-1~focal
sudo apt install nginx=1.23.4-1~$(lsb_release -cs)
不指定版本直接
apt install nginx会安装 mainline 仓库当前最新主线版(高于 1.23),如果你严格只要 1.23,必须写版本号锁定。
步骤 7:验证版本 & 测试配置
nginx -v
# 校验配置
sudo nginx -t
# 启动并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx
⚠️ 重点坑点
Ubuntu 代号匹配:
lsb_release -cs自动识别:Ubuntu20.04 = focal
Ubuntu22.04 = jammy
模块丢失风险:ubuntu 源自带 nginx 带很多模块(
nginx-full);nginx 官方源默认包模块更少。如果你依赖
ngx_pagespeed、lua、geoip等第三方模块,这种 apt 升级方式会丢失模块!这种场景建议源码编译升级。
1.23 是主线开发版,生产环境评估稳定性,stable 偶数版本(1.22/1.24)更稳妥。
配置文件目录变化:Ubuntu 源旧 nginx 配置在
/etc/nginx,官方源同样是/etc/nginx,一般配置可以直接复用,但务必 nginx -t 校验。
备选方案:平滑二进制升级(不停机,业务首选)
如果不能停机,不卸载重装,直接编译 1.23 源码,替换 nginx 二进制,执行kill -USR2热升级。
适合 7×24 在线业务,风险更低,但需要安装编译依赖。
回滚方案(升级出错时)
# 卸载新版
sudo apt remove nginx
# 删除nginx官方源配置
sudo rm /etc/apt/sources.list.d/nginx.list /etc/apt/preferences.d/99nginx
sudo apt update
# 重新装ubuntu自带1.18
sudo apt install nginx
# 恢复旧配置
sudo cp -r /etc/nginx.bak.xxx/* /etc/nginx/
sudo nginx -t && sudo systemctl restart nginx