记录一下那天晚上的排查过程。日志里出现对 /wp-admin/admin-ajax.php 的 POST 请求,UA 显示是蜘蛛,频率还不低,每次都触发一次数据库查询。
真正麻烦的地方在于,几个原因的现象几乎一样。页面里的 ajax 地址被写进了可抓取的链接。也可能是蜘蛛尝试提交表单,触发了 POST 请求。
另外,接口没有做方法校验,任何方法都能进来。
上来先确认请求方法和来源路径
grep 'POST' access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head
只允许 POST 访问接口
if ($request_method !~ ^(POST|GET)$) { return 405; }
剩下的就是把接口路径从页面链接里移除
grep -rn 'admin-ajax.php' /www/wwwroot/site/wp-content/themes/
命令输出我都留了记录,免得改完记不清原来的值。
改之前先确认了最近有没有人动过配置,避免白查一遍。
改完先别撤,确认这几项。日志里蜘蛛的 POST 请求归零,页面功能和用户提交不受影响,数据库负载下降,接口响应时间恢复正常。
补一句。POST 请求不会被收录,但会消耗服务器资源,能挡就挡,注意别把正常表单提交一起拦了。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。