每个网站通常都会遇到很多非搜索引擎的爬虫,这些爬虫大部分都是用于内容采集或是初学者所写,它们和搜索引擎的爬虫不一样,没有频率控制,往往会消耗大量服务器资源,导致带宽白白浪费了。下面介绍下怎么通过nginx来屏蔽网络爬虫的方法。
附一张没啥用的图:
浏览器输入URL后HTTP请求的完整过程
思路
Nginx可以根据User-Agent过滤请求,只需要在需要URL入口位置通过一个简单的正则表达式就可以过滤不符合要求的爬虫请求:
location / { if ($http_user_agent ~* "Python|curl|java|wget|httpclient|okhttp") { return 503; } # 其它正常配置 ... }
注意:变量$http_user_agent是一个可以直接在location中引用的Nginx变量。~*表示不区分大小写的正则匹配,通过python就可以过滤掉80%的Python爬虫。
Nginx中禁止屏蔽网络爬虫
server { listen 80; server_name _; client_max_body_size 1024m; ssi on; ssi_silent_errors on; if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot") { return 403; } location /XXX { ........... }
配置后重启可以用curl 测试一下
curl -I -A "qihoobot" www.gzwise.top
总结
上面主要是介绍通过User-Agent过滤网络爬虫请求的一个方式,大家有空也可以自己测试一下,后面会分享更多关于nginx方面内容,感兴趣的朋友可以关注下!
,