Linux下apt安装Nginx后默认不备份配置,需通过DPkg::Pre-Invoke钩子在升级前自动备份/etc/nginx至/etc/nginx-backups,并用dpkg-statoverride标记配置文件为手工修改以避免覆盖。

Linux下用apt安装Nginx后,系统默认不会自动备份配置文件;但每次升级或重装时,/etc/nginx/nginx.conf 及其 conf.d/ 下的配置可能被覆盖或重置。要实现“自动备份”,需借助 apt 的钩子机制(如 dpkg 钩子或 apt 的 dpkg-pre-invoke),在包操作前主动保存当前配置。
利用 apt 钩子在升级/重装前自动备份
Ubuntu/Debian 系统支持通过 /etc/apt/apt.conf.d/ 中的配置启用预执行脚本。最稳妥的方式是使用 DPkg::Pre-Invoke 钩子:
- 创建钩子脚本:
sudo nano /usr/local/bin/nginx-config-backup.sh - 写入以下内容(带时间戳、跳过重复备份):
#!/bin/bash
NGINX_CONF="/etc/nginx"
BACKUP_DIR="/etc/nginx-backups"
TIMESTAMP=$(date +"%Y%m%d-%H%M%S")
if [ -d "$NGINX_CONF" ]; then
mkdir -p "$BACKUP_DIR"
tar -cf "$BACKUP_DIR/nginx-conf-$TIMESTAMP.tar" -C /etc nginx
gzip "$BACKUP_DIR/nginx-conf-$TIMESTAMP.tar"
fi
- 赋予可执行权限:
sudo chmod +x /usr/local/bin/nginx-config-backup.sh - 启用钩子:
echo 'DPkg::Pre-Invoke {"'/usr/local/bin/nginx-config-backup.sh'"};' | sudo tee /etc/apt/apt.conf.d/99-nginx-backup
避免备份被覆盖:排除配置文件参与 apt 管理
apt 升级时若检测到配置文件被修改,会提示是否保留本地版本(`config file` prompt)。但若想彻底跳过交互并确保不被覆盖,可标记配置为“手工修改”:
- 运行:
sudo dpkg-statoverride --update --add root root 0644 /etc/nginx/nginx.conf - 对
conf.d/中的关键文件也可逐个添加(如/etc/nginx/conf.d/default.conf) - 这样 apt 会默认保留你的版本,不再覆盖或弹出提示
补充:日常手动备份命令(快速应急)
即使有钩子,也建议定期归档并清理旧备份:
- 一键压缩备份:
sudo tar -czf /root/nginx-conf-$(date +%F).tar.gz /etc/nginx - 保留最近7天备份:
find /etc/nginx-backups -name "nginx-conf-*.tar.gz" -mtime +7 -delete - 检查备份完整性:
tar -tzf /etc/nginx-backups/nginx-conf-*.tar.gz | head -5
验证钩子是否生效
触发一次模拟升级来测试(不实际安装):
- 先清空测试备份目录:
sudo rm -f /etc/nginx-backups/* - 运行:
sudo apt install --reinstall -s nginx-core | grep -q "Pre-Invoke" && echo "钩子已加载" - 再执行真实重装:
sudo apt install --reinstall nginx-core,然后检查/etc/nginx-backups/是否生成新文件










