Geek人生 · 2025 年 11 月 22 日 0

WordPress禁止含参数url访问,阻止机器人高频采集

最近我日常看看我另一个博客的服务器日志,用Wordfence插件分析流量。结果发现不是我的插件太多导致服务器负载大,而是单纯采集爬虫太多、机器人请求太多、垃圾注入和垃圾评论机器人太多,导致偶尔数据库绷不住挂掉,导致502错误或者宕机。

具体分析一下高频访问的机器人IP、user-agent和url,发现大致是几种情况:

  1. 大模型AI平台的爬虫:OpenAI的GPTBot、Claude的ClaudeBot,超级疯狂,每分钟上百次请求;
  2. SEO、SEM平台的爬虫:MJ12BOT等,爬虫种类多数量大;
  3. 电信运营商的反垃圾爬虫和内容审核爬虫,对应IP能够whois反查能够看到中国电信、中国联通和中国移动的邮箱,猜测出具体作用,例如antispam@china-telecom.com这种,这种也是异常高频,不顾服务器压力的,有些应该是做内容审查的,所以会爬全站所有页面;
  4. 最后是纯坏的,钻漏洞的,绕过缓存的,sql注入的,穷举登录的,也不可能遵循robots.txt规则,主要需要禁止访问的就是这种。

我博客上主要是绕过缓存,高频访问的,看了一下url,都是https://xx.com?body=xxxxxx&cachehost=xxx&cacheerrorinfo之类的。被这类机器访问除了服务器负载,还有一个问题是这些带参数的链接还会被搜索引擎收录并判为重复页面。所以我干脆用nginx配置禁止了,写法如下。

    # 阻止包含特定恶意参数的请求
    if ($args ~* "CacheHost|CacheErrorInfo|ERR_CACHE_ACCESS_DENIED|body=|subject=") {
        # 可以选择返回 403 Forbidden 错误
        # return 403;

        # 或者使用 444 直接断开连接(对恶意爬虫更隐蔽)
        return 444;
    }

放在网站配置文件conf的server{}里边,尽量靠前,大致这样。

server {
    listen 80;
    server_name xx.com www.xx.com;

    # 阻止包含特定恶意参数的请求
    if ($args ~* "CacheHost|CacheErrorInfo|ERR_CACHE_ACCESS_DENIED|body=|subject=") {
        # 可以选择返回 403 Forbidden 错误
        # return 403;

        # 或者使用 444 直接断开连接(对恶意爬虫更隐蔽)
        return 444;
    }
}
0
希望看到您的想法,请您发表评论x