发现 nginx 日志异常,通常可以从「日志内容异常」和「日志行为异常」两个维度来做。下面给你一套比较实用、可落地的思路。
可能原因:
排查:
# 看 nginx 是否在跑
ps -ef | grep nginx
# 看日志最后修改时间
ls -l --time-style=full-iso /var/log/nginx/access.log
# 看磁盘
df -h
表现:
常见原因:
排查:
du -sh /var/log/nginx/*
# 统计状态码
awk '{print $9}' access.log | sort | uniq -c | sort -nr
异常信号:
404:被扫路径499:客户端提前断开(常见于攻击或后端慢)502 / 504:后端问题awk '{print $7}' access.log | sort | uniq -c | sort -nr | head
关注:
.envwp-admin/actuator/phpmyadminawk '{print $1}' access.log | sort | uniq -c | sort -nr | head
异常:
awk -F\" '{print $6}' access.log | sort | uniq -c | sort -nr
常见异常 UA:
curl, python-requests如果日志格式里有 $request_time:
awk '{print $NF}' access.log | sort -n | tail
异常:
tail -f access.log | grep -E ' 4[0-9][0-9] | 5[0-9][0-9] '
goaccess access.log -o report.html
| 现象 | 可能原因 |
|---|---|
| 只有部分请求有日志 | 多 server / location 没统一日志 |
| 日志时间戳错 | 时区配置问题 |
| 一直 499 | 客户端超时 / 后端慢 |
| 一直 444 | nginx 主动断开(限流/恶意) |
| 没有 error.log | error_log 被关或级别太高 |
✅ 基础版:
✅ 进阶版:
如果你愿意,可以:
我可以直接帮你定位是哪类异常 + 给具体处理方案。