推荐使用系统自带的logrotate管理Nginx日志,因其无需修改Nginx配置、不依赖脚本或第三方工具,支持自动切割、压缩、删除旧日志,并通过kill -USR1安全重载日志文件。

直接用系统自带的 logrotate 就行,不用改 Nginx 配置、不写脚本、也不依赖第三方工具。它每天自动切分、压缩、删旧日志,稳定又省心。
为什么推荐 logrotate 而不是自己写脚本
很多人尝试在 Nginx 的 server 块里用 $date 动态生成带日期的日志名,但这是无效的——Nginx 配置不支持 shell 变量,强行硬编码路径会导致日志写入失败或丢失。而 logrotate 是 Linux 发行版默认集成的成熟工具,由 crond 每天定时触发,切割过程原子安全,还能配合 kill -USR1 通知 Nginx 重新打开日志文件,确保不丢一条日志。
快速启用:宝塔面板一键设置
如果你用宝塔管理服务器,根本不用碰命令行:
- 进「网站」列表 → 找到目标站点 → 点击「设置」→ 切换到「日志」选项卡
- 勾选「启用日志切割」,周期选「每天」→ 保存
- 宝塔会自动生成专属配置、添加定时任务、设置压缩与保留策略(默认留30天)
整个过程零出错风险,适合绝大多数中小站点。
手动配置:精细控制多个日志文件
需要同时处理 access.log 和 error.log,或想自定义保留天数、压缩方式时,可编辑配置文件:
- 新建文件:
/etc/logrotate.d/example.com(文件名建议用域名) - 填入以下内容(以每天切割、保留15天、gzip压缩为例):
/var/www/logs/example.com/access.log
/var/www/logs/example.com/error.log {
daily
rotate 15
compress
delaycompress
missingok
notifempty
dateext
create 644 www-data www-data
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
注意检查日志路径是否与 Nginx 配置中 access_log 和 error_log 指向一致;权限(如 www-data)需匹配运行 Nginx 的用户。
验证和调试小技巧
配置完别急着等明天,马上测试是否生效:
- 运行
logrotate -d /etc/logrotate.d/example.com查看模拟执行过程(-d 是 debug 模式,只报错不操作) - 加
-f强制立即执行:logrotate -f /etc/logrotate.d/example.com - 执行后检查:
ls -lt /var/www/logs/example.com/是否出现access.log.20260813.gz类似文件 - 确认 Nginx 进程没中断,且新日志继续写入
access.log


















