最近在整理服务器日志时,发现 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 请求时:
不要第一时间恐慌。
先判断:
- 是否扫描
- 是否命中
- 是否有成功返回
大多数情况只是互联网背景噪音。
但日志结构化处理,确实可以减少阅读成本。
如果大家平时遇到什么奇怪日志,也欢迎交流。