一条 awk 命令找出 Nginx 日志里的攻击源:状态码、TOP IP、慢响应排查 [复制链接]

管理员组

服务器被刷、被扫描、发现异常请求时,第一件事就是翻 Nginx 访问日志。与其慢慢翻,不如直接用 awk 做聚合分析,几秒定位问题 IP。下面几条命令覆盖最常见场景,复制即用。

1. 按返回状态码统计请求量

awk '{print $9}' access.log | sort | uniq -c | sort -rn | head -20

一般 200/304 是正常,403/502/503 频繁出现说明有问题,404 量级异常大可能是扫描器或 404 探测。

2. 找出请求量最大的 TOP 20 IP

awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -20

某 IP 请求量吊打其他所有 IP,基本就是抓取或攻击源,可以直接 ban 掉。

3. 统计 5xx 错误里哪个 IP 触发最多

awk '$9 >= 500 {print $1}' access.log | sort | uniq -c | sort -rn | head -20

4. 找出响应时间超过 5 秒的慢请求

# 日志格式需含 $request_time,放在 $10 位置(按你的 log_format 调整列号)
awk '$10 > 5 {print $1, $7, $10}' access.log | sort -k3 -rn | head -20

5. 找出被高频访问的具体 URL

awk '{print $7}' access.log | sort | uniq -c | sort -rn | head -20

实战组合

先跑第 2、3 条确认异常 IP,再看该 IP 具体请求了什么:

grep '1.2.3.4' access.log | awk '{print $6, $7, $9}' | sort | uniq -c | sort -rn | head

定位到 IP 和 URL 后,再用防火墙或 Nginx deny 规则封禁即可。建议把这几条命令存成 shell 函数,服务器出问题直接调用。

最新回复

请先登录后再回复 登录

uid:1 管理员组
关注
错过了不该错过的人,那就是遗憾!
发帖 1418
评论 93
粉丝 1
关注 0
发新帖
目录
一条 awk 命令找出 Nginx 日志里的攻击源:状态码、TOP IP、慢响应排查