温馨提示×

nginx日志异常怎么发现

小樊
64
2026-09-20 22:07:30
栏目: 编程语言

发现 nginx 日志异常,通常可以从「日志内容异常」和「日志行为异常」两个维度来做。下面给你一套比较实用、可落地的思路。


一、先看“日志行为”是否异常(最容易忽略)

1. 日志突然不增长了

可能原因:

  • nginx 被重启或挂了
  • 日志路径被改
  • 磁盘写满
  • 被 logrotate 切走但没 reopen

排查:

# 看 nginx 是否在跑
ps -ef | grep nginx

# 看日志最后修改时间
ls -l --time-style=full-iso /var/log/nginx/access.log

# 看磁盘
df -h

2. 日志疯狂增长(异常流量)

表现:

  • 几分钟内日志暴涨
  • 磁盘很快满

常见原因:

  • 被扫描 / 爬虫 / 攻击
  • 错误页被循环请求
  • 健康检查配置错误

排查:

du -sh /var/log/nginx/*

二、从“日志内容”发现异常(核心)

1. 大量 4xx / 5xx

# 统计状态码
awk '{print $9}' access.log | sort | uniq -c | sort -nr

异常信号:

  • 大量 404:被扫路径
  • 大量 499:客户端提前断开(常见于攻击或后端慢)
  • 大量 502 / 504:后端问题

2. 异常 URL(攻击特征)

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

关注:

  • .env
  • wp-admin
  • /actuator
  • /phpmyadmin
  • 乱码、超长 URL

3. 异常 IP

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

异常:

  • 单 IP 请求量极高
  • 多个国家短时间混合访问

4. User-Agent 异常

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

常见异常 UA:

  • 空 UA
  • curl, python-requests
  • 扫描器特征(sqlmap、nmap)

5. 响应时间异常

如果日志格式里有 $request_time:

awk '{print $NF}' access.log | sort -n | tail

异常:

  • 正常 <1s,突然出现 10s+

三、用工具更高效发现异常

1. 实时看异常

tail -f access.log | grep -E ' 4[0-9][0-9] | 5[0-9][0-9] '

2. 可视化(推荐)

  • GoAccess(轻量)
goaccess access.log -o report.html
  • ELK / Grafana + Loki
  • 云厂商日志服务

四、常见“nginx 日志异常”的真实场景

现象 可能原因
只有部分请求有日志 多 server / location 没统一日志
日志时间戳错 时区配置问题
一直 499 客户端超时 / 后端慢
一直 444 nginx 主动断开(限流/恶意)
没有 error.log error_log 被关或级别太高

五、建议你建立的“异常发现机制”

✅ 基础版:

  • 每天统计 4xx / 5xx
  • 监控日志大小 & 增长速率

✅ 进阶版:

  • 状态码 + IP + UA 联动告警
  • 异常 URL 自动封 IP
  • 接入监控系统(Prometheus / Zabbix)

如果你愿意,可以:

  • 贴一段异常 nginx 日志
  • 或说明你是运维 / 开发 / 安全场景

我可以直接帮你定位是哪类异常 + 给具体处理方案。

0 踩