简单介绍使用Nginx限制百度蜘蛛频繁抓取的问题

这篇文章主要介绍了使用Nginx限制百度蜘蛛频繁抓取的问题,百度蜘蛛对网站的抓取频率高和抓取量骤增导致服务器负载高,经常收到警告信息,每分钟允许百度蜘蛛抓取200次,超过频率限制的返回503,对Nginx限制蜘蛛频繁抓取相关知识感兴趣的朋友一起看看吧

百度蜘蛛对网站的抓取频率高和抓取量骤增导致服务器负载高,经常收到警告信息。最终采用nginx的ngx_http_limit_req_module模块限制了百度蜘蛛的抓取频率。每分钟允许百度蜘蛛抓取200次,超过频率限制的返回503。

limit_req_zone

语法: limit_req_zone $variable zone=name:size rate=rate;

默认值: none

配置段: http

设置一块共享内存限制域的参数,它可以用来保存键值的状态。 它特别保存了当前超出请求的数量。 键的值就是指定的变量(空值不会被计算)。

这里键值使用客户端的agent, 使用$http_user_agent变量。 如果限制域的存储空间耗尽了,对于后续所有请求,服务器都会返回 503 (Service Temporarily Unavailable)错误。

请求频率可以设置为每秒几次(r/s)。如果请求的频率不到每秒一次, 你可以设置每分钟几次(r/m)。比如每秒半次就是30r/m。

全局配置nginx.conf

limit_req_zone $ning_spider zone=ning_spider:10m rate=200r/m;

某个server中

if ($http_user_agent ~* "baiduspider|Googlebot") {
 set $ning_spider $http_user_agent;
 }
 limit_req zone=ning_spider burst=5 nodelay;

参数说明:

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

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

指令limit_req 中的nodelay 表示当已经达到burst值时,再来新请求时,直接返回503IF部分用于判断是否是百度蜘蛛的user agent。如果是,就对变量$ning_spider赋值。这样就做到了只对百度蜘蛛进行限制了。

测试,速率达不上可以同时开多个以下脚本测试

[root@localhost ~]# cat test.sh
#! /bin/bash  
sum=0;  
for i in {1..1000}  
do 
((sum = sum + i))  
curl -I -A "Baiduspider" http://www.hezongtianxia.com
curl -I -A "Sogou web spider" http://www.hezongtianxia.com
done 
echo $sum
tailf /home/wwwlog/access.log|grep 503

到此这篇关于使用Nginx限制百度蜘蛛频繁抓取 的文章就介绍到这了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用Nginx的模块来限制同一IP的访问频率。其中一个常用的模块是ngx_http_limit_req_module,它可以帮助您实现这个目标。 要使用该模块,请按照以下步骤进行操作: 1. 打开您的Nginx配置文件,通常位于 `/etc/nginx/nginx.conf` 或 `/etc/nginx/conf.d/default.conf`。 2. 在适当的位置(例如 `http` 块内),添加以下配置: ``` http { # 设置限制频率的zone limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; # 设置限制频率的规则 server { location / { # 使用之前定义的zone进行限制 limit_req zone=one burst=5; # 其他配置项... } } # 其他配置项... } ``` 在上述配置中,`limit_req_zone` 定义了一个名为 `one` 的zone,使用 `$binary_remote_addr` 来标识每个IP地址。`10m` 是用于存储限制信息的内存大小,您可以根据实际情况进行调整。`rate=1r/s` 表示每秒允许一个请求。 在 `server` 块内的 `location` 配置中,使用 `limit_req zone=one burst=5` 来应用限制规则。`burst` 参数表示在超过限制频率时允许的突发请求数量。 3. 保存配置文件并重新加载Nginx,以使更改生效。您可以使用以下命令重新加载Nginx: ``` sudo systemctl reload nginx ``` 这样,Nginx就会根据配置限制同一IP的访问频率。当超过设定的限制时,Nginx会返回一个503错误给客户端。 请注意,您可以根据需要调整 `limit_req_zone` 和 `limit_req` 的参数,以满足您的具体需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值