我的wordpress博客系统,是部署在nginx上的,我在做完SEO之后想看看百度和谷歌的爬虫有没有爬到我的站点,也希望可以屏蔽掉一些爬虫。于是我通过分析nginx的日志,从useragent层面屏蔽掉一些爬虫。
分析出爬虫的useragent
过滤掉”MSIE|Firefox|Chrome|Opera|Safari|Gecko|Mozilla|wordpress“浏览器和Wordpress的请求,剩下的就是爬虫了,将日志写入到robots.log中。
1 2 3 |
awk {'print $1,$3,$4,$5,$7,$9,$12'} wordpress.access.log |egrep -iv "MSIE|Firefox|Chrome|Opera|Safari|Gecko|Mozilla|wordpress">robots.log |
上图是我截取的一段爬虫访问记录,绿色的是百度爬虫,红色的是不知名的爬虫。但是我只希望谷歌和百度的爬虫访问。
nginx根据useragent屏蔽爬虫
以我的站点配置为例,在/etc/nginx/conf.d/wordpress.conf中添加配置,下面是屏蔽掉百度谷歌以外额一些爬虫,返回403拒绝访问。下面是收罗的一些以知的爬虫和应用程序的useragent。
1 2 3 4 |
if ($http_user_agent ~* "Yeti|^Java|Commons-HttpClient|Wget|^PHP|Ruby|Python|Linguee Bot|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot") { return 403; } |
更智能的方案
通过useragent并不能封锁那些恶意的爬虫,它们完全可以伪装useragent,这个时候通过通过IP的访问频率,过滤出高频率的请求,然后通过加入iptables拒绝访问。
看不懂啊