IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

使用nginx限制蜘蛛的频繁抓取

博学无忧 2014-11-28 23:06:17 累计浏览 4,502 次
本机暂存

    上周玩客被百度蜘蛛给盯上了,百度蜘蛛对玩客的抓取频率增加了5倍。百度蜘蛛抓取量骤增,导致服务器负载很高。最终用nginx的ngx_http_limit_req_module模块限制了百度蜘蛛的抓取频率。每分钟允许百度蜘蛛抓取200次,多余的抓取请求返回503。

   nginx的配置:

   #全局配置

   limit_req_zone      $anti_spider    zone=anti_spider:60m    rate=200r/m;

   #某个server中

    limit_req zone=anti_spider burst=5 nodelay;

    if ($http_user_agent ~* “baiduspider”) {

       set $anti_spider $http_user_agent;

    }

   参数说明:

   指令linit_req_zone 中的rate=200r/m 表示每分钟只能处理200个请求。

   指令limit_req 中的burst=5 表示最大并发为5。即同一时间只能同时处理5个请求。

   指令limit_req 中的 nodelay 表示当已经达到burst值时,再来新请求时,直接返回503

   IF部分用于判断是否是百度蜘蛛的user agent。如果是,就对变量$anti_spider赋值。这样就做到了只对百度蜘蛛进行限制了。

   详细的参数说明,可以查看官方文档。

   http://nginx.org/en/docs/http/ngx_http_limit_req_module.html#limit_req_zone

   这个模块对请求的限制采用了漏桶算法。

   漏桶算法详见 http://baike.baidu.com/view/2054741.htm

   相关代码请查看nginx源码文件 src/http/modules/ngx_http_limit_req_module.c

   代码的核心部分是ngx_http_limit_req_lookup 方法。

同分类推荐文章

  1. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
  2. Go 实验特性详解 (2026-06-21 10:05:27)
  3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

查看更多 后端 文章 →

建议继续学习

  1. 配置Nginx+uwsgi更方便地部署python应用 (累计阅读 107,167)
  2. 搜狐闪电邮箱的 Nginx/Postfix 使用模式 (累计阅读 33,898)
  3. 记录一个软中断问题 (累计阅读 16,957)
  4. 解析nginx负载均衡 (累计阅读 16,625)
  5. server日志的路径分析 (累计阅读 11,241)
  6. Nginx模块开发入门 (累计阅读 11,172)
  7. 检查nginx配置,重载配置以及重启的方法 (累计阅读 10,897)
  8. Cacti 添加 Nginx 监控 (累计阅读 10,646)
  9. fsockopen 异步处理 (累计阅读 10,346)
  10. 使用Squid缓存视频 (累计阅读 10,339)