有一些爬虫非常占用服务器资源,例如网上吐槽最多的Bytespider,成天没日没夜的爬,一天几万甚至几十万,对于一些小网站来说,负担还是很高的,robots禁用规则对他根本不生效,于是只能通过user-agent做了屏蔽,下面整理下iis及nginx及apache环境下如何屏蔽不知名的蜘蛛ua。
注意(请根据自己的情况调整删除或增加ua信息,我提供的规则中包含了非蜘蛛的ua,一些扫描器的头部信息等,几乎用不着,若您的网站比较特殊,需要不同的蜘蛛爬取,建议仔细分析规则,将指定ua删除即可)
1、nginx,下面是屏蔽规则,将规则添加到配置文件的server段里面,当这些蜘蛛来抓取时会返回444;
为什么要返回444呢? 444是nginx内置的错误代码。对我们来说 return 444 比 return 404还要好。因为 nginx 下即使return 404,也会有返回的header和一个包含错误信息的html body。但是return 444,服务器会立刻关闭连接,就好象服务不存在一样。
if ($http_user_agent ~ "Bytespider|Java|perl|Python|Wget|Xenu|^$" ){return 444;}
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="Block spider"> <match url="(^robots.txt$)" ignoreCase="false" negate="true" /><conditions> <add input="{HTTP_USER_AGENT}" pattern="Bytespider|Java|perl|Python|Wget|Xenu|ZmEu|^$"ignoreCase="true" /> </conditions> <action type="AbortRequest" /> </rule> </rules> </rewrite> </system.webServer> </configuration>
<IfModule mod_rewrite.c> RewriteEngine On #Block spider RewriteCond %{HTTP_USER_AGENT}"Bytespider|Java|perl|Python|Wget|Xenu|ZmEu|^$" [NC]RewriteRule !(^robots.txt$) - [F]</IfModule>
屏蔽验证
查看日志搜索不到任何byte蜘蛛
!评论内容需包含中文