一、前言

近期博客网站总是不能访问,经过分析日志,是因为蜘蛛程序的批量访问导致主机扛不住洪流后程序宕机。由于网站被nginx代理,所以想着使用nginx进行蜘蛛拦截,这里主要记录了nginx配置过程。

二、nginx配置

2.1 新增agent_deny.conf

这里我们在nginx的conf的目录下新增agent_deny.conf配置文件,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
#禁止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|YisouSpider|HttpClient|MJ12bot|heritrix|EasouSpider|LinkpadBot|Ezooms|PetalBot|^$" )
{
return 403;
}
#禁止非GET|HEAD|POST方式的抓取
if ($request_method !~ ^(GET|HEAD|POST)$) {
return 403;
}

2.2 加载配置

在nginx.conf配置代理服务的位置新增 include agent_deny.conf;

1
2
3
4
5
6
7
8
9
10
11
12
13
        location / {
root html;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
fastcgi_param HTTP_X_FORWARDED_FOR $http_x_forwarded_for;
proxy_set_header User-Agent $http_user_agent;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
include agent_deny.conf;
proxy_pass http://blogServer;
}

2.3 重新加载nginx

./sbin/nginx -s reload

2.4 另外从apache中直接禁掉所有蜘蛛的抓取可以用以下配置

1
BrowserMatch "Spider" bad_bot