Nginx-rsync 常用选项
·
一、引言:为什么需要精通 rsync 选项?
在 Nginx 运维中,无论是多节点集群的静态资源同步、配置文件分发,还是网站数据的备份,rsync 几乎是每日必用的工具。然而,仅仅会用 rsync src dest 是远远不够的。
错误的选项组合可能导致:
- 同步后文件权限错乱,Nginx 无法读取。
- 传输了大量无用的日志或临时文件,浪费带宽。
- 目标目录积累了大量已删除的旧文件,占用磁盘空间。
本文将为你梳理 rsync 最核心、最常用的选项,并结合 Nginx 的典型应用场景,助你写出高效、安全、可靠的同步命令。
二、rsync 核心选项速查表
1. 基础模式:归档与详细输出
表格
| 选项 | 全称 | 功能说明 |
|---|---|---|
-a |
--archive |
归档模式(最常用!)。这是一个“超级开关”,它等价于 -rlptgoD,即递归、保留软链接、权限、时间戳、属主、属组和设备文件。对于同步 Nginx 的 HTML、配置文件等,这是首选。 |
-v |
--verbose |
详细模式。显示同步过程中的文件列表,便于调试和确认。 |
常用组合:rsync -av
2. 性能优化:压缩与断点续传
| 选项 | 全称 | 功能说明 |
|---|---|---|
-z |
--compress |
传输时压缩。在传输过程中对文件进行压缩,能显著减少网络流量,尤其适合文本文件(如 HTML, CSS, JS, conf)。但会增加 CPU 开销,对于已压缩的图片/视频效果不大。 |
-P |
--partial --progress |
显示进度 + 断点续传。--partial 保留部分传输的文件,--progress 显示实时传输进度。在同步大文件时非常有用。 |
常用组合:rsync -avzP
3. 精确控制:镜像与过滤
| 选项 | 全称 | 功能说明 |
|---|---|---|
--delete |
删除目标端多余文件。使目标目录成为源目录的严格镜像。例如,你在源端删除了一个旧的 JS 文件,使用此选项后,目标端的该文件也会被自动清理。慎用!确保你的源是“唯一可信源”。 | |
--exclude |
排除指定文件或目录。避免同步无用或敏感文件。可多次使用。 | |
--include |
包含匹配的文件。通常与 --exclude='*' 结合使用,实现“只同步特定类型文件”的需求。 |
Nginx 场景示例:
# 同步静态资源,并排除 .git 和日志文件
rsync -avz --delete \
--exclude='.git' \
--exclude='*.log' \
/local/deploy/html/ user@nginx-server:/var/www/html/
4. 安全与限制
| 选项 | 全称 | 功能说明 |
|---|---|---|
--dry-run |
-n |
模拟运行。执行命令但不实际修改任何文件,仅显示将会发生什么。这是验证复杂命令是否正确的黄金法则! |
--bwlimit=KBPS |
限速。限制 I/O 带宽,单位为 KB/s。防止同步任务占满服务器带宽,影响线上业务。例如 --bwlimit=5000 表示限速 5MB/s。 |
|
--max-size=SIZE |
限制同步文件的最大大小。例如 --max-size=100M 可以避免意外同步超大文件。 |
三、Nginx 场景下的最佳实践组合
场景 1:同步前端构建产物到 Nginx 服务器
目标:将 dist/ 目录下的所有文件同步到 Nginx 的 root 目录,并保持严格的镜像关系。
rsync -avzP --delete \
--exclude='.DS_Store' \
--exclude='node_modules/' \
./dist/ \
deploy_user@192.168.1.100:/var/www/myapp/
-a: 保留所有文件属性。-vzP: 详细、压缩、显示进度。--delete: 确保旧版本文件被清理。--exclude: 过滤掉开发环境文件。
场景 2:分发 Nginx 配置文件
目标:将新的 nginx.conf 和 sites-enabled/ 下的配置同步到多台服务器。
# 使用 --dry-run 先预览
rsync -avn \
--exclude='*.bak' \
/etc/nginx/ \
root@nginx-server:/etc/nginx/
# 确认无误后,去掉 -n 执行
rsync -av \
--exclude='*.bak' \
/etc/nginx/ \
root@nginx-server:/etc/nginx/
- 注意:同步配置文件后,必须在目标服务器上执行
nginx -t && systemctl reload nginx来重载配置。
场景 3:备份 Nginx 日志(增量备份)
目标:每天将日志文件备份到远程存储,且只传输新增内容。
rsync -av \
--backup \
--backup-dir=/backup/logs/$(date +%Y%m%d) \
/var/log/nginx/ \
backup_user@backup-server:/archive/nginx-logs/
--backup: 如果目标文件已存在,则对其进行备份。--backup-dir: 指定备份文件的存放目录,按日期组织。
四、一个至关重要的细节:路径末尾的斜杠 /
rsync 对路径末尾是否有 / 极其敏感,这决定了同步的行为:
- 有斜杠
src/:同步的是src/目录下的内容。rsync -a /home/user/docs/ /backup/ # 结果: /backup/file1.txt (直接在 backup 下) - 无斜杠
src:同步的是src这个目录本身。rsync -a /home/user/docs /backup/ # 结果: /backup/docs/file1.txt (在 backup 下创建 docs 目录)
✅ 黄金法则:当你想把 A 目录里的所有东西放进 B 目录里时,A 后面要加
/。
五、总结
感谢您的阅读!如果你有任何疑问或想要分享的经验,请在评论区留言交流!
更多推荐




所有评论(0)