用ngxtop、shell命令、tail/grep和fail2ban可轻量追踪nginx异常流量:ngxtop实时分析日志;shell组合实现分钟级ip封禁;tail -f + grep秒级人工排查;fail2ban自动防护闭环。

用轻量级工具追踪 Nginx 异常流量,核心是“快定位、低开销、易落地”。不需要部署整套 ELK 或写复杂脚本,几个命令和一个终端就能实时盯住风险点。
用 ngxtop 实时看异常指标
ngxtop 是最贴近“top 命令”体验的工具,启动即用,无需配置数据库或服务:
- 安装后直接运行 ngxtop,它会自动识别默认日志路径和格式(如 combined)
- 加参数聚焦关键维度:比如 ngxtop -l /var/log/nginx/access.log --group-by ip --filter 'count > 100',实时列出每秒请求超 100 次的 IP
- 查敏感行为:用 ngxtop --filter 'status >= 400' --group-by path 快速看到哪些路径集中返回 4xx/5xx
- 响应慢?加 --sort request_time 排序,一眼揪出耗时最高的请求
用 shell 组合命令做分钟级阈值告警
适合在无 Python 环境或需自动化处置的场景,例如封禁高频恶意 IP:
- 提取最近 60 秒日志(依赖日志时间戳格式):awk -v d="$(date -d '1 minute ago' '+%d/%b/%Y:%H:%M')" '$4 ~ d {print $1}' /var/log/nginx/access.log
- 统计并筛选:... | sort | uniq -c | awk '$1 > 300 {print $2}',输出 1 分钟内请求超 300 次的 IP
- 配合 iptables 封禁:for ip in $(...); do iptables -I INPUT -s $ip -j DROP; done
- 建议加上白名单过滤(如办公网段、CDN IP),避免误伤
用 tail + grep 快速人工排查
当问题刚出现、需要秒级响应时,这是最直接的方式:
- tail -f /var/log/nginx/access.log | grep ' 404 ' —— 实时盯住 404 扫描行为
- tail -f /var/log/nginx/access.log | grep -E '(wp-login|phpmyadmin|\.env)' —— 监控已知敏感路径访问
- tail -f /var/log/nginx/access.log | awk '{if($9>5000) print $0}' —— 抓取响应体超 5KB 的异常大响应(可能为数据泄露或错误回显)
- 搭配 watch -n 2 可定期刷新统计,比如每 2 秒跑一次 top IP 统计
补充:fail2ban 自动化防护
不是纯监控,但属于轻量闭环——把日志分析结果直接转为防护动作:
- 定义 filter:匹配 403/404 高频、SQL 注入特征(如
union select)、扫描路径 - 配置 jail:设置 maxretry = 5、findtime = 600(10 分钟内触发 5 次就封)
- 动作 action:默认调用 iptables,也可集成 cloudflare api 或 nginx map 动态封禁
- 优势是开箱即用、社区规则丰富,适合防御常见暴力破解和目录扫描











