access.log 里 /wp-admin/setup-config.php、/wp-admin/admin-ajax.php 这类 404 一天两万多条,UA 是 python-requests,IP 散在几十个段。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

awk '$9 == 404 {print $1}' access.log | sort | uniq -c | sort -rn | head
# 结果写进黑名单后引入
include /etc/nginx/conf.d/blockips.conf;

扫描器按字典挨个试常见路径,返回 404 也会继续。这些请求本身不危险,暴露的是后台地址固定不变,以及日志里能看出站点装了哪些组件。这一点先确认清楚,后面就不用反复试。

碰到「后台扫描日志」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。

改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。

具体做法是,先把这类 404 单独打到另一个日志,别和正常访问混在一起;统计高频 IP 段,命中前几名的直接写进黑名单;后台入口改成非常规路径,别指望改个名字就万事大吉。

改完照着核一遍,封禁后这类 404 明显下降,正常页面的 200 不受影响。

作者 9823189