一、前言
近期博客网站总是不能访问,经过分析日志,是因为蜘蛛程序的批量访问导致主机扛不住洪流后程序宕机。由于网站被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
|