温馨提示×

怎样定位nginx日志异常ip

小樊
41
2026-09-23 22:16:08
栏目: 编程语言

定位 Nginx 日志中的异常 IP,通常是从访问频率、行为特征、状态码、请求内容等维度来分析。下面给你一套实用、可操作的方法(Linux 环境为主)。


一、先找到 Nginx 日志位置

常见路径:

/var/log/nginx/access.log
/var/log/nginx/error.log

确认日志格式(默认 combined):

$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"

二、最常用:统计异常访问 IP

1️⃣ 访问量最高的 IP(防刷/爬虫/攻击)

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

2️⃣ 短时间高频访问(如 1 分钟内)

awk '{print $1, $4}' access.log | cut -d: -f1-3 | sort | uniq -c | sort -nr | head

或按分钟统计:

awk '{print $1, substr($4,2,17)}' access.log | sort | uniq -c | sort -nr | head

三、按「异常状态码」定位 IP

3️⃣ 大量 404 / 400(扫描、恶意请求)

awk '$9 ~ /40[04]/ {print $1}' access.log | sort | uniq -c | sort -nr | head

4️⃣ 大量 500(后端异常或攻击)

awk '$9 == 500 {print $1}' access.log | sort | uniq -c | sort -nr

四、按「请求行为」定位异常 IP

5️⃣ 扫描敏感路径(wp-admin、.env、phpmyadmin 等)

grep -E "\.env|wp-admin|phpmyadmin|/admin" access.log | awk '{print $1}' | sort | uniq -c | sort -nr

6️⃣ 可疑 User-Agent

grep -iE "curl|python|java|sqlmap|nikto|scan" access.log | awk '{print $1}' | sort | uniq -c

五、按「请求方法」定位异常 IP

7️⃣ 大量 POST 请求(爆破、刷接口)

awk '$6 == "\"POST\"" {print $1}' access.log | sort | uniq -c | sort -nr

8️⃣ 异常请求方法(PUT、DELETE)

awk '$6 ~ /"(PUT|DELETE)"/ {print $1}' access.log

六、结合时间快速排查

9️⃣ 查看某一时段的异常 IP

grep "10/Apr/2026:15:" access.log | awk '{print $1}' | sort | uniq -c | sort -nr

七、进阶:自动识别“异常 IP”

✅ 使用 GoAccess(可视化)

goaccess access.log -o report.html --log-format=COMBINED

✅ 使用 fail2ban

[nginx-botsearch]
enabled = true
logpath = /var/log/nginx/access.log
maxretry = 100

八、常见“异常 IP”特征总结

✅ 单 IP 请求量远超正常用户
✅ 高频访问不存在路径(404)
✅ 无 Referer / 奇怪 UA
✅ 固定时间批量请求
✅ 大量 POST 登录接口


如果你愿意,可以:

  • 贴一段 access.log 示例
  • 或说明你是 被刷接口 / 被爬 / 被攻击 / 排查 500

我可以直接帮你写精准过滤命令或 Nginx 限流配置。

0 踩