有些时候我们建立的网站并不希望被搜索引擎索引,然而搜素引擎还会自动的索引网站,即使设置了账号登陆等访问权限。
本文从 robots.txt 文件和 nginx 配置文件入手,彻底屏蔽了常见的搜索引擎。
- robot.txt 屏蔽
User-agent: *
Disallow: /
另存为 robot.txt 放在网站根目录。
- nginx 屏蔽
cd /usr/local/nginx/conf
vim agent_deny.conf
#禁止Scrapy等工具的抓取
if ($http_user_agent ~* (Scrapy|Curl|HttpClient)) {
return 403;
}
#禁止指定UA及UA为空的访问
if ($http_user_agent ~ "FeedDemon|JikeSpider|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|EasouSpider|Ezooms|^$" ) {
return 403;
}
#禁止正规搜索引擎的访问
if ($http_user_agent ~ "compatible|Baiduspider|Google|Googlebot|Googlebot-Image|Yahoo!|YahooSeeker|Bingbot|soso|sogou|yahoo|sohu-search|yodao|YoudaoBot|robozilla|msnbot|MJ12bot|NHN|Twiceler|Twitterbot|^$" ) {
return 403;
}
#禁止feed抓取网站的访问
if ($http_user_agent ~ "Feedly|FeedBurner|xFruits|Feedsky crawler|YoudaoFeedFetcher|Xianguo\.com|SimplePie|^$" ) {
return 403;
}
#禁止非GET|HEAD|POST方式的抓取
if ($request_method !~ ^(GET|HEAD|POST)$) {
return 403;
}
然后,在网站相关配置中的 location / { 之后 } 之前插入如下代码:
include agent_deny.conf;
保存后,执行命令平滑重启nginx即可:
/usr/local/nginx/sbin/nginx -s reload
- 测试效果
使用curl -A 模拟抓取即可,比如:
# 模拟UA为空的抓取
curl -I -A '' blog.antior.cn
# 模拟百度蜘蛛抓取
curl -I -A 'Baiduspider' blog.antior.cn
# 模拟Feedly抓取
curl -I -A 'Feedly' blog.antior.cn
- UA 收集
下面是网络上常见的垃圾 UA 列表
FeedDemon 内容采集
BOT/0.1 (BOT for JCE) sql注入
CrawlDaddy sql注入
Java 内容采集
Jullo 内容采集
Feedly 内容采集
UniversalFeedParser 内容采集
ApacheBench cc攻击器
Swiftbot 无用爬虫
YandexBot 无用爬虫
AhrefsBot 无用爬虫
YisouSpider 无用爬虫(已被UC神马搜索收购,此蜘蛛可以放开!)
jikeSpider 无用爬虫
MJ12bot 无用爬虫
ZmEu phpmyadmin 漏洞扫描
WinHttp 采集cc攻击
EasouSpider 无用爬虫
HttpClient tcp攻击
Microsoft URL Control 扫描
YYSpider 无用爬虫
jaunty wordpress爆破扫描器
oBot 无用爬虫
Python-urllib 内容采集
Indy Library 扫描
FlightDeckReports Bot 无用爬虫
Linguee Bot 无用爬虫
搜素引擎 UA 可以访问 github 项目获取:https://github.com/andyhu/search-engine-bot-list
参考资料: