阅读量:3
Debian 上可落地的 Nginx 自动备份策略
一 备份范围与频率建议
- 配置与站点:备份 /etc/nginx/ 下的全部配置(如 nginx.conf、conf.d/、sites-available/ 等),建议每日备份并保留7–30 天。
- 网站文件:备份 /var/www/ 或实际 root 目录,建议每日备份并保留7–30 天。
- SSL 证书:备份 /etc/ssl/ 或 /etc/letsencrypt/,建议每日备份并保留90 天以上(证书续期频繁)。
- 数据库:如部署了 MySQL/MariaDB/PostgreSQL,建议每日备份并保留7–30 天。
- 日志:不建议把运行日志纳入常规配置备份;采用**按日切割 + 压缩 + 定期清理(如保留 30 天)**的策略,避免备份体积膨胀。
二 自动化备份脚本与定时任务
- 全量备份脚本(配置 + 站点 + 证书 + 可选数据库),保留最近 7 天:
#!/usr/bin/env bash
set -Eeuo pipefail
# 配置
BACKUP_DIR="/var/backups/nginx"
DATE=$(date +"%Y%m%d%H%M%S")
KEEP_DAYS=7
# 创建目录
mkdir -p "$BACKUP_DIR"
# 备份 Nginx 配置
tar -czf "$BACKUP_DIR/nginx_conf_$DATE.tar.gz" -C / etc/nginx
# 备份网站文件(按实际 root 调整)
tar -czf "$BACKUP_DIR/www_$DATE.tar.gz" -C / var/www
# 备份证书(两种常见路径,按实际启用其一)
if [[ -d /etc/letsencrypt ]]; then
tar -czf "$BACKUP_DIR/letsencrypt_$DATE.tar.gz" -C / etc/letsencrypt
elif [[ -d /etc/ssl ]]; then
tar -czf "$BACKUP_DIR/ssl_$DATE.tar.gz" -C / etc/ssl
fi
# 可选:备份数据库(示例为 MySQL,按需启用)
# mysqldump -u root -p"$DB_PASS" --single-transaction --routines --triggers --databases your_db > "$BACKUP_DIR/db_$DATE.sql"
# gzip "$BACKUP_DIR/db_$DATE.sql"
# 清理旧备份
find "$BACKUP_DIR" -type f -name "*.tar.gz" -mtime +$KEEP_DAYS -delete
# 可选:上传到远程存储(示例 rsync)
# rsync -avz --delete "$BACKUP_DIR/" backup@backup.example.com:/backups/nginx/
- 赋予执行权限并加入定时任务(每天 02:00 执行):
chmod +x /usr/local/bin/nginx_backup.sh
sudo crontab -e
# 添加:
0 2 * * * /usr/local/bin/nginx_backup.sh >> /var/log/nginx_backup.log 2>&1
- 说明:如希望减少体积,可将打包方式改为 增量备份(rsync),仅同步自上次以来变更的文件。
三 日志轮转与清理
- 推荐优先使用系统自带的 logrotate 管理 Nginx 日志(避免与自定义脚本冲突)。
- 如需自定义按日切割、压缩并保留 30 天 的脚本,可参考:
#!/usr/bin/env bash
LOG_DIR="/var/log/nginx"
DAYS_TO_KEEP=30
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
# 切割
[[ -f "$LOG_DIR/access.log" ]] && mv "$LOG_DIR/access.log" "$LOG_DIR/access_$YESTERDAY.log"
[[ -f "$LOG_DIR/error.log" ]] && mv "$LOG_DIR/error.log" "$LOG_DIR/error_$YESTERDAY.log"
# 通知 Nginx 重新打开日志文件
if [[ -f /var/run/nginx.pid ]]; then
kill -USR1 "$(cat /var/run/nginx.pid)"
fi
# 压缩
gzip -f "$LOG_DIR/access_$YESTERDAY.log"
gzip -f "$LOG_DIR/error_$YESTERDAY.log"
# 清理
find "$LOG_DIR" -type f -name "access_*.log.gz" -mtime +$DAYS_TO_KEEP -delete
find "$LOG_DIR" -type f -name "error_*.log.gz" -mtime +$DAYS_TO_KEEP -delete
echo "$(date '+%F %T') 日志切割、压缩与清理完成。" >> "$LOG_DIR/nginx_log_cleanup.log"
- 加入定时任务(每天 00:00 执行):
sudo chmod +x /usr/local/bin/rotate_compress_clean_nginx_logs.sh
sudo crontab -e
# 添加:
0 0 * * * /usr/local/bin/rotate_compress_clean_nginx_logs.sh
- 要点:切割后必须向 Nginx 主进程发送 USR1 信号,使其重新打开日志文件,避免继续写入已重命名的旧文件。
四 恢复流程与验证
- 恢复配置(建议先停服务,恢复后做语法检查再启动):
sudo systemctl stop nginx
# 示例:恢复配置
sudo tar -xzvf /var/backups/nginx/nginx_conf_YYYYMMDDHHMMSS.tar.gz -C /
# 语法检查
sudo nginx -t
sudo systemctl start nginx
- 恢复网站文件与证书:
sudo tar -xzvf /var/backups/nginx/www_YYYYMMDDHHMMSS.tar.gz -C /
sudo tar -xzvf /var/backups/nginx/letsencrypt_YYYYMMDDHHMMSS.tar.gz -C / # 或 ssl_*.tar.gz
- 恢复数据库(如启用):
gunzip < /var/backups/nginx/db_YYYYMMDDHHMMSS.sql.gz | mysql -u root -p
# 或 psql -U postgres < db_YYYYMMDDHHMMSS.sql
- 验证要点:检查站点可访问、证书有效、关键页面与接口返回正常、数据库记录一致。
五 安全与运维要点
- 备份目录与脚本权限:仅允许 root 读写执行;备份文件含敏感信息(如私钥、数据库凭据),注意传输与存储加密。
- 异地与多副本:定期将备份同步到远程主机或对象存储,避免单点故障。
- 保留策略:配置与证书保留期应长于网站文件与数据库;日志压缩后保留 30 天 通常足够。
- 监控与告警:记录脚本输出日志(如 /var/log/nginx_backup.log),对备份失败、磁盘空间不足设置告警。
- 避免重复轮转:若已启用 logrotate,不要再用自定义脚本对同一日志做轮转,以免冲突。
以上就是关于“Debian Nginx自动备份策略”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm