nginx:如何设置搜索引擎框的连接限制Gone Wild(特别是Bingbot)

作为服务器管理员,您可能会知道这个问题:您已完成所有操作以优化服务器,并且其工作效果非常好,随之而来的是一个愚蠢的搜索引擎bot(如Bingbot),同时可以使用数百个连接点击所有的虚拟机,使您的服务器负载上升。 当然,您不希望完全阻止机器人(除非您不在意特定的搜索引擎),因此您可以使用robots.txt和/或nginx来控制搜索引擎机器人与您的服务器的连接。

1初步说明

我在本教程中专注于Bingbot,因为这个机器人每次访问网站时都会产生过多的连接(我没有注意到任何其他搜索引擎bot)。 当然,您应该做的第一件事是限制Bing网站管理员工具中的抓取速度。 如果没有帮助,或者您无法访问服务器上所有vhost的Bing网站管理员工具,请继续阅读。

2使用robots.txt

Bingbot了解Crawl-delay指令(Googlebot不会将此用于Googlebot!),因此您可以在robots.txt文件中使用(请参阅http://www.bing.com/blogs/site_blogs/ b / webmaster / archive / 2012/05/03 / to-crawl-or-not-to-crawl-that-be-bingbot-s-question.aspx ):

User-Agent: bingbot
Crawl-delay: 1

因为您在robots.txt中为Bingbot创建了一个额外的部分,所以允许 / 禁止 User-Agent:*的指令对Bingbot无效,因此请务必重复对Bingbot的Allow / Disallow指令,例如这个:

User-Agent: *
Disallow: /cache/
Disallow: /engine/
Disallow: /files/
Disallow: /templates/
Disallow: /uploads/
Disallow: /newsletter/
Disallow: /kontaktformular/
Disallow: /widerrufsrecht/
Disallow: /datenschutz-und-sicherheit
Disallow: /agb/
Disallow: /shopware.php/sViewport,admin
Disallow: /shopware.php/sViewport,note
Disallow: /shopware.php/sViewport,basket
Disallow: /shopware.php/sViewport,rma
Disallow: /shopware.php/sViewport,support
Disallow: /shopware.php/sViewport,ticket
Disallow: /shopware.php/sViewport,newsletter
Disallow: /shopware.php/sViewport,tellafriend
Sitemap: http://www.example.com/sitemap.xml

User-Agent: bingbot
Crawl-delay: 1
Disallow: /cache/
Disallow: /engine/
Disallow: /files/
Disallow: /templates/
Disallow: /uploads/
Disallow: /newsletter/
Disallow: /kontaktformular/
Disallow: /widerrufsrecht/
Disallow: /datenschutz-und-sicherheit
Disallow: /agb/
Disallow: /shopware.php/sViewport,admin
Disallow: /shopware.php/sViewport,note
Disallow: /shopware.php/sViewport,basket
Disallow: /shopware.php/sViewport,rma
Disallow: /shopware.php/sViewport,support
Disallow: /shopware.php/sViewport,ticket
Disallow: /shopware.php/sViewport,newsletter
Disallow: /shopware.php/sViewport,tellafriend
Sitemap: http://www.example.com/sitemap.xml

3使用nginx控制Bot连接

我们可以使用HttpGeoModuleHttpLimitReqModule来控制搜索引擎机器人与您的nginx服务器的连接。 打开/etc/nginx/nginx.conf ...

vi /etc/nginx/nginx.conf

...并将其添加到您的http {}容器(在您的虚拟机配置文件包含/定义的部分之前):

[...]
geo $isabot {
        default 0;
        #bingbot
        157.55.32.0/24 1;
        157.56.229.0/24 1;
        157.56.93.0/24 1;
        157.55.33.0/24 1;
}
map $isabot $limited_ip_key {
    0 '';
    1 $binary_remote_addr;
}
limit_req_zone $limited_ip_key zone=isabot:5m rate=2r/s;
limit_req zone=isabot burst=200;
[...]

这将将Bingbot的爬网速度限制为每秒两次; 超过连接将被延迟并放入200个突发(直到突发已满,那么nginx将返回一个503错误到Bingbot)。

当然,您可以向地理位置容器添加更多的IP或子网。

不要忘记重新加载nginx:

/etc/init.d/nginx reload

4链接

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏