在 Debian 上 Nginx 日志过大 是常见问题,一般从 日志轮转、访问日志控制、错误日志级别、自动清理 四个方面解决。下面按“最推荐 → 可选”顺序说明。
logrotate(官方做法 ✅)Debian 默认已安装 logrotate,Nginx 日志应该由它来管理。
cat /etc/logrotate.d/nginx
典型内容:
/var/log/nginx/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
systemctl reload nginx > /dev/null 2>&1
endscript
}
logrotate -vf /etc/logrotate.d/nginx
如果没生效,说明:
✅ 这是最安全、最标准的方式
如果不需要统计访问:
access_log off;
例如:
server {
listen 80;
server_name example.com;
access_log off;
}
access_log /var/log/nginx/access.log combined if=$loggable;
配合:
map $status $loggable {
~^[23] 0; # 200/300 不记录
default 1;
}
access_log /var/log/nginx/access.log combined buffer=32k flush=5m;
error_log /var/log/nginx/error.log warn;
级别说明(从上到下越来越详细):
crit < error < warn < notice < info < debug
⚠️ 生产环境不要用 info / debug
find /var/log/nginx -name "*.log" -mtime +30 -delete
crontab -e
0 3 * * * find /var/log/nginx -name "*.log" -mtime +30 -delete
journalctl --vacuum-size=100M
error_log /var/log/nginx/error.log warn;
access_log /var/log/nginx/access.log combined buffer=32k flush=5m;
配合:
logrotate + 7 天轮转 + gzip
# 查看日志大小
du -sh /var/log/nginx/*
# 查看 logrotate 状态
cat /var/lib/logrotate/status
# 查看 nginx 日志配置
nginx -T | grep log
如果你愿意,可以把 access.log / error.log 的大小 或 nginx.conf 相关配置贴出来,我可以帮你精确优化(比如高并发、CDN、API 场景)。