我们在网站建设和网站维护过程中经常会遇到网站卡住的情况,如果你的云服务器使用了宝塔面板进行可视化管理,此时登录宝塔面板,就会发现云服务器运行堵塞,负载状态100%。此时重启服务器会得到暂时的缓解,但是很快又会重蹈覆辙。其实,这是因为有人在攻击或者采集你的网站,我们可以通过宝塔面板+Nginx屏蔽恶意user_agent访问,减轻服务器负载,让网站运行更流畅。
UA是user_agent浏览器访问标识,空UA基本可以判定为采集器。以前是可以使用宝塔nginx防火墙屏蔽的,现在宝塔官方把这个功能删了,那么只能使用nginx来屏蔽了。网上找了一些方法来屏蔽这些垃圾蜘蛛访问网站。
user_agent屏蔽方法一:
先分享一个简易版:
宝塔面板 – 网站 – 设置 – 配置文件,第八行添加以下代码:
如图:
1、禁止空agent的浏览器访问
5、禁止非GET|HEAD|POST方式的抓取
6、禁止特殊的user_agent的访问
7、进阶版,以上代码综合使用:
#禁止空agent的浏览器访问 if ($http_user_agent ~ ^$) { return 444; } #禁止Scrapy等工具的抓取 if ($http_user_agent ~* (Scrapy|Curl|HttpClient)) { return 444; } #禁止指定UA的访问 if ($http_user_agent ~ "ApacheBench|WebBench|HttpClient|Java|python|Go-http-client|FeedDemon|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Feedly|UniversalFeedParser|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|lightDeckReports Bot|YYSpider|DigExt|YisouSpider|MJ12bot|heritrix|EasouSpider|LinkpadBot|Ezooms" ) { return 444; } #禁止非GET|HEAD|POST方式的抓取 if ($request_method !~ ^(GET|HEAD|POST)$) { return 444; } #禁止特殊的user_agent的访问 if ($http_user_agent ~ "Mozilla/4.0\ \(compatible;\ MSIE\ 6.0;\ Windows\ NT\ 5.1;\ SV1;\ .NET\ CLR\ 1.1.4322;\ .NET\ CLR\ 2.0.50727\)") { return 444; }
常见的一些蜘蛛爬虫user_agent。
UA类型 | 描述 |
ApacheBench | 性能压测 |
WebBench | 性能压测 |
WinHttp | 采集cc |
HttpClient | tcp攻击 |
Jmeter | 压力测试 |
BOT/0.1 (BOT for JCE) | sql注入 |
CrawlDaddy | sql注入 |
Indy Library | 扫描 |
ZmEu phpmyadmin | 扫描 |
Microsoft URL Control | 扫描 |
jaunty | wordpress扫描器 |
Java | 内容采集 |
Python-urllib | 内容采集 |
Jullo | 内容采集 |
FeedDemon | 内容采集 |
Feedly | 内容采集 |
UniversalFeedParser | 内容采集 |
Alexa Toolbar | 内容采集 |
Swiftbot | 无用爬虫 |
YandexBot | 无用爬虫 |
AhrefsBot | 无用爬虫 |
jikeSpider | 无用爬虫 |
MJ12bot | 无用爬虫 |
oBot | 无用爬虫 |
FlightDeckReports Bot | 无用爬虫 |
Linguee Bot | 无用爬虫 |
EasouSpider | 无用爬虫 |
YYSpider | 无用爬虫 |
大家根据需要进行判断和屏蔽。
我们再看一些常见搜索引擎蜘蛛的User_Agent:
百度蜘蛛
Baiduspider+(+http://www.baidu.com/search/spider.htm”)
Google蜘蛛
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
Googlebot/2.1 (+http://www.googlebot.com/bot.html)
Googlebot/2.1 (+http://www.google.com/bot.html)
雅虎蜘蛛(分别中国和美国蜘蛛)
Mozilla/5.0 (compatible; Yahoo! Slurp China; http://misc.yahoo.com.cn/help.html”)
Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp”)
新浪爱问蜘蛛
iaskspider/2.0(+http://iask.com/help/help_index.html”)
Mozilla/5.0 (compatible; iaskspider/1.0; MSIE 6.0)
搜狗蜘蛛
Sogou web spider/3.0(+http://www.sogou.com/docs/help/webmasters.htm#07″)
Sogou Push Spider/3.0(+http://www.sogou.com/docs/help/webmasters.htm#07″)
网易蜘蛛
Mozilla/5.0 (compatible; YodaoBot/1.0; http://www.yodao.com/help/webmaster/spider/”; )
MSN蜘蛛
msnbot/1.0 (+http://search.msn.com/msnbot.htm”)
user_agent屏蔽方法二:
1、宝塔面板找到文件目录/www/server/nginx/conf文件夹下面,新建一个文件agent_deny.conf,内容是以下代码。
#禁止Scrapy等工具的抓取 if ($http_user_agent ~* (Scrapy|Curl|HttpClient)) { return 403; } #禁止指定UA及UA为空的访问 if ($http_user_agent ~* "FeedDemon|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|HttpClient|MJ12bot|heritrix|Bytespider|Ezooms|Googlebot|JikeSpider|SemrushBot|^$" ) { return 403; } #禁止非GET|HEAD|POST方式的抓取 if ($request_method !~ ^(GET|HEAD|POST)$) { return 403; }
2、网站设置里面添加:
宝塔 – 【网站】-【设置】点击左侧 【配置文件】选项卡,在 “#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则” 上方空白行插入红色字体的代码:“include agent_deny.conf; ” 保存后即可生效,这样这些蜘蛛或工具扫描网站的时候就会提示403禁止访问。
如果你网站使用火车头采集发布,使用以上代码会返回403错误,发布不了的。如果想继续使用火车头采集发布,请使用下面的代码:
#禁止Scrapy等工具的抓取 if ($http_user_agent ~* (Scrapy|Curl|HttpClient)) { return 403; } #禁止指定UA访问。UA为空的可以访问,比如火车头可以正常发布。 if ($http_user_agent ~ "FeedDemon|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|YandexBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|HttpClient|MJ12bot|heritrix|Bytespider|Ezooms|Googlebot|JikeSpider|SemrushBot" ) { return 403; } #禁止非GET|HEAD|POST方式的抓取 if ($request_method !~ ^(GET|HEAD|POST)$) { return 403; }
以上两种方法都可以屏蔽恶意User_Agent的访问,降低云服务器负载,具体如何选择大家可以根据自己的喜好使用。