在 Debian 13 上把 Nginx 升到 1.28 的几个坑
一台 2024 年买的轻量云主机,系统是 Debian 13,nginx 一直用发行版自带的 1.26。最近看到 1.28 出来了,就想顺手升一下,结果折腾了一晚上。
坑一:仓库版本还是 1.26
Debian 13 自带的是 1.26.3,安全更新跟着走,但大版本不会动。想要 1.28 得加 nginx 官方源:
curl -fsSL https://nginx.org/keys/nginx_signing.key \
| sudo gpg --dearmor -o /usr/share/keyrings/nginx.gpg
echo "deb [signed-by=/usr/share/keyrings/nginx.gpg] \
http://nginx.org/packages/debian trixie nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
加完 apt update 就能看到 1.28 了。但官方源和发行版源会打架,记得用 apt-cache policy nginx 确认优先级。
坑二:配置文件被覆盖
升级的时候 debconf 会问要不要替换 /etc/nginx/nginx.conf,选错了就把自己改过的 include 全冲掉了。稳妥的做法是升级前先备份:
sudo cp -a /etc/nginx /root/nginx-$(date +%F)
另外 --force-confold 这个参数很好用,可以让 dpkg 保留旧配置。
坑三:http2 指令的写法变了
1.25 之后 listen 443 ssl http2; 会报 deprecated 警告,要拆成两行:
listen 443 ssl;
http2 on;
虽然只是警告不影响运行,但每次 reload 都刷一行日志,看着烦。
最后
升完跑了三天,没出问题。现在回头看,其实 1.26 也没什么不好,就是手痒。下次再想升级之前,先把备份做足。