Nginx在CentOS上的默认日志路径为/var/log/nginx/
,主要包含:
access.log
,记录客户端请求详情。error.log
,记录服务器运行错误。实时查看日志
tail -f /var/log/nginx/access.log # 实时查看访问日志
tail -f /var/log/nginx/error.log # 实时查看错误日志
关键词过滤
grep "404" /var/log/nginx/access.log # 查找404错误请求
grep "Connection refused" /var/log/nginx/error.log # 查找连接拒绝错误
统计分析
awk '{print substr($4, 2, 11)}' /var/log/nginx/access.log | sort | uniq -c
awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
awk '{sum[$7]+=$10} END {for (url in sum) print sum[url], url}' /var/log/nginx/access.log | sort -nr | head -10
GoAccess(实时可视化)
yum install -y goaccess
goaccess /var/log/nginx/access.log --log-format=COMBINED -o /var/www/report.html
ELK Stack(大规模日志管理)
日志轮转(避免文件过大)
编辑/etc/logrotate.d/nginx
,设置按天轮转并压缩旧日志:
/var/log/nginx/*.log {
daily
rotate 7
compress
missingok
create 0640 nginx nginx
}
慢请求分析
若日志中包含$request_time
字段,可按响应时间排序:
awk '{print $10, $7}' /var/log/nginx/access.log | sort -nr | head -20
恶意爬虫识别
统计高频IP或异常User-Agent:
awk '{ip[$1]++; ua[$11]++} END {for (i in ip) if (ip[i] > 500) print i, ip[i]}' /var/log/nginx/access.log
/etc/nginx/nginx.conf
中通过log_format
指令配置。