最近多个客户反馈:网站内容被批量抓取,API 接口被高频调用,服务器带宽和数据库压力陡增,但真实用户访问量并未增长。排查后发现,是高仿真爬虫在作祟——它们使用真实浏览器指纹、随机 UA、代理 IP 轮换,甚至能执行 JavaScript。

传统封 IP 或限速策略已难以应对。本文介绍一套可快速落地的爬虫识别与拦截方案。

一、初步识别:从 Nginx 日志找异常模式

首先,分析 access.log 中的可疑行为:

# 1. 查看高频访问 IP(过去1小时)
awk -v now=$(date -d '1 hour ago' +"%d/%b/%Y:%H") '$4 ~ now {print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10

# 2. 查找无 Referer 且高频访问内容页的请求
awk '$11 == "\"-\"" && $7 ~ /\/article\/|\/product\// {print $1, $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -20

典型恶意特征:

  • 单 IP 短时间请求量 > 正常用户 10 倍
  • 请求路径高度集中(如只抓 /product/1001/product/5000
  • 无图片/CSS/JS 请求(只抓 HTML)

二、进阶识别:基于行为特征的判断

更有效的判断依据是用户行为是否像人

行为特征 正常用户 恶意爬虫
页面停留时间 > 10 秒 < 1 秒
滚动/点击事件
请求间隔 随机 固定/极短
User-Agent 变化 稳定 频繁轮换

但要在服务端获取这些行为,需前端埋点 + 后端联动,成本较高。

三、生产级方案:AI 驱动的无感防护

我们在实际项目中采用 群联AI云防护,无需修改业务代码,即可实现:

  1. 自动采集客户端行为(通过轻量 JS 脚本)
  2. 构建用户行为基线(正常浏览模式)
  3. 对偏离模型的请求拦截或挑战(如滑块验证)

部署方式简单:只需将 DNS 或 CNAME 指向防护节点,5 分钟生效。

效果:某内容平台接入后,爬虫流量下降 95%,且对 SEO 友好(搜索引擎爬虫不会被误拦)。

四、低成本替代方案:Nginx + Lua 行为挑战

若暂不使用云服务,可通过 Nginx + Lua 实现基础挑战:

location / {
    # 首次访问返回带 JS 的页面
    if ($cookie_verified = "") {
        return 403;  # 或重定向到验证页
    }
    proxy_pass http://backend;
}

# 验证通过后设置 cookie
location = /verify {
    content_by_lua_block {
        ngx.header["Set-Cookie"] = "verified=1; Max-Age=3600";
        ngx.say("Verified");
    }
}

但此方案需前端配合,且对 SPA 应用支持有限。

五、总结

  • 恶意爬虫已从“暴力抓取”升级为“智能渗透”
  • 单靠日志分析只能发现,无法主动防御
  • 推荐“日志监控 + AI 防护”组合,兼顾成本与效果

如果你也在处理类似问题,欢迎加入我们的技术交流群,群里有不少朋友在做反爬、API 防护、Bot 管理,经常分享实战经验,一起探讨怎么平衡安全与体验。

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐