一次 Nginx 异常日志分析:为什么会出现大量奇怪的 404 请求?

12 阅读2分钟

最近在整理服务器日志时,发现 Nginx access.log 里突然出现大量异常路径访问。

类似这样:

185.217.0.12 - - [08/Feb/2026:14:22:31 +0800] "GET /admin.php HTTP/1.1" 404 162 "-" "Mozilla/5.0"
103.214.1.88 - - [08/Feb/2026:14:22:32 +0800] "GET /phpmyadmin HTTP/1.1" 404 162 "-" "Mozilla/5.0"
45.142.122.21 - - [08/Feb/2026:14:22:33 +0800] "GET /.env HTTP/1.1" 404 162 "-" "curl/7.58.0"

第一反应是:

  • 是不是有人在扫端口?
  • 是不是暴露了管理路径?
  • 是否存在漏洞?

一、先看几个关键特征

1️⃣ 访问路径异常

  • /admin.php
  • /phpmyadmin
  • /.env

这些都不是我系统里真实存在的路径。

2️⃣ 状态码全部 404

说明:

  • 服务本身正常
  • 没有被真正命中
  • 只是探测行为

3️⃣ User-Agent 比较可疑

  • curl
  • 批量扫描常见 UA
  • 很少是正常浏览器完整 UA

二、这类日志一般意味着什么?

通常是:

自动化漏洞扫描

常见来源:

  • masscan
  • zmap
  • nikto
  • botnet 扫描脚本

目标通常是:

  • 寻找未授权后台
  • 寻找 phpMyAdmin
  • 探测 .env 文件泄露
  • 探测常见 CMS 路径

三、如何快速判断是否危险?

可以从几个角度判断:

1️⃣ 是否集中在短时间爆发

如果 1 分钟内大量不同路径请求,大概率是扫描。

2️⃣ IP 是否分散

如果来自大量不同 IP,很可能是分布式扫描。

3️⃣ 是否存在成功返回(200)

如果全部 404,通常风险较低。


四、是否需要紧张?

如果满足:

  • 全部 404
  • 无异常 200
  • 无异常 500
  • 无异常流量增长

一般不用过度紧张。

但可以做:

  • 开启 fail2ban
  • 开启简单的 rate limit
  • 配置 WAF
  • 限制管理路径访问

五、一个有意思的现象

在分析这类日志时,我发现一个问题:

日志其实信息很多,但阅读成本很高。

如果能把:

  • 访问模式
  • 可疑路径
  • 风险等级
  • 可能攻击类型

结构化出来,会更容易判断。

最近在尝试做一些“日志结构化分析”的实验,把日志转成:

  • 摘要
  • 可疑行为分类
  • 风险评估
  • 建议处理步骤

还在测试阶段,后面整理成熟再分享。


六、总结

当看到大量奇怪 404 请求时:

不要第一时间恐慌。

先判断:

  • 是否扫描
  • 是否命中
  • 是否有成功返回

大多数情况只是互联网背景噪音。

但日志结构化处理,确实可以减少阅读成本。


如果大家平时遇到什么奇怪日志,也欢迎交流。