概述
每個網站通常都會遇到很多非搜索引擎的爬蟲,這些爬蟲大部分都是用於內容採集或是初學者所寫,它們和搜索引擎的爬蟲不一樣,沒有頻率控制,往往會消耗大量服務器資源,導致帶寬白白浪費了。下面介紹下怎麼通過nginx來屏蔽網絡爬蟲的方法。
附一張沒啥用的圖:
思路
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方面內容,感興趣的朋友可以關注下!
閱讀更多 波波說運維 的文章