nginx 禁止某些User Agent抓取网站

nginx配置步骤

进入到nginx安装目录下的conf目录,将如下代码保存为 agent_deny.conf

# cd /usr/local/nginx/conf
# vi agent_deny.conf

#禁止Scrapy等工具的抓取

if ($http_user_agent ~* (Scrapy|Curl|HttpClient)) {
     return 403;
}

#禁止指定UA及UA为空的访问

if ($http_user_agent ~ "WinHttp|WebZIP|FetchURL|node-superagent|java/|FeedDemon|Jullo|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|Java|Feedly|Apache-HttpAsyncClient|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|HttpClient|MJ12bot|heritrix|EasouSpider|Ezooms|BOT/0.1|YandexBot|FlightDeckReports|Linguee Bot|^$" ) {
     return 403;            
}

#禁止非GET|HEAD|POST方式的抓取
if ($request_method !~ ^(GET|HEAD|POST)$) {
    return 403;
}
然后,在网站相关配置中的 server段插入如下代码:

include agent_deny.conf;

保存后,执行如下命令,平滑重启nginx即可:

/usr/local/nginx/sbin/nginx -s reload

当然如果不配置环境直接使用php也可以

//获取UA信息
$ua = $_SERVER['HTTP_USER_AGENT'];
//将恶意USER_AGENT存入数组
$now_ua = array('FeedDemon ','BOT/0.1 (BOT for JCE)','CrawlDaddy ','Java','Feedly','UniversalFeedParser','ApacheBench','Swiftbot','ZmEu','Indy Library','oBot','jaunty','YandexBot','AhrefsBot','MJ12bot','WinHttp','EasouSpider','HttpClient','Microsoft URL Control','YYSpider','jaunty','Python-urllib','lightDeckReports Bot');
//禁止空USER_AGENT,dedecms等主流采集程序都是空USER_AGENT,部分sql注入工具也是空USER_AGENT
if(!$ua) {
header("Content-type: text/html; charset=utf-8");
wp_die('请勿采集本站,因为采集的站长木有小JJ!');
}else{
    foreach($now_ua as $value )
//判断是否是数组中存在的UA
    if(eregi($value,$ua)) {
    header("Content-type: text/html; charset=utf-8");
    wp_die('请勿采集本站,因为采集的站长木有小JJ!');
    }
}

apache屏蔽恶意 User Agent

使用 .htaccess 屏蔽 User Agent 的方法很多,这里使用 rewrite 规则把这些 User Agent 转移走,以达到屏蔽的效果。

RewriteCond %{HTTP_USER_AGENT} “.*EmbeddedWB.*” [OR]
RewriteCond %{HTTP_USER_AGENT} “.*QunarBot.*” [OR]
RewriteCond %{HTTP_USER_AGENT} “.*Windows 98.*” [OR]
RewriteCond %{HTTP_USER_AGENT} “^Mozilla/4.0$”
RewriteRule ^(.*)$ http://www.111cn.net/

使用 .htaccess 需要了解一些正则表达式语法,以正确匹配字符串。

如果你觉得有用,屏蔽恶意 User Agent 前,不妨先分析一下自己的网站日志,根据自己的需要定制。可以使用 Firefox+User Agent Switcher 测试效果,Chrome 也有类似的切换 User Agent 的扩展程序

时间: 2024-09-20 11:00:37

nginx 禁止某些User Agent抓取网站的相关文章

JAVA使用爬虫抓取网站网页内容的方法_java

本文实例讲述了JAVA使用爬虫抓取网站网页内容的方法.分享给大家供大家参考.具体如下: 最近在用JAVA研究下爬网技术,呵呵,入了个门,把自己的心得和大家分享下 以下提供二种方法,一种是用apache提供的包.另一种是用JAVA自带的. 代码如下: // 第一种方法 //这种方法是用apache提供的包,简单方便 //但是要用到以下包:commons-codec-1.4.jar // commons-httpclient-3.1.jar // commons-logging-1.0.4.jar

C# Winform项目,如何实现定期抓取网站中指定栏目中的内容

问题描述 C# Winform项目,如何实现定期抓取网站中指定栏目中的内容 在C# Winform项目中,想通过"网络爬虫"定时抓取某个网站中的指定某个菜单中的内容(指定某个菜单的内容有可能是列表,也有可能纯文字或文字加图片的说明内容). 注:指定某个菜单中的内容是列表的话,"网络爬虫"既可以抓取列表也可以抓取列表对应的每条明细内容 请问各位,有没有能实现上述功能"网络爬虫"的相关资料,最好能提供"网络爬虫"相关DEMO.谢谢

socket-c语言正则表达式抓取网站的<title>

问题描述 c语言正则表达式抓取网站的<title> 本程序的功能是搜索网站的 字段的值 遗憾的是并不通用:ps:我也不知道为什么失败 问题1:正则表达式或运算消除标签大小写后匹配不到字符串 问题2:正则表达式实现零宽断言后发现匹配不到字符串 问题3:在科大官网上测试 成功 在其他网站可能会失败 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h

php抓取网站图片并保存的实现方法_php技巧

php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享给大家,代码如下: 以上就是为大家分享的php抓取网站图片并保存的实现方法,希望对大家的学习有所帮助.

抓取网站数据 报Connection timed out

问题描述 做了一个抓取网站的功能,用的是httpclient.在自己的电脑上运行,可以抓取到.但是把工程发布到服务器上,就会报I/O exception (java.net.ConnectException) caught when processing request: Connection timed out请问,是什么原因啊? 解决方案 目测判断:你的服务器与目标网站没有成功连接.排查方法:1.检查目标地址,确保服务器上,你访问的url与本地一致(如果是通过配置文件配置,请检查配置文件):

Python使用scrapy抓取网站sitemap信息的方法_python

本文实例讲述了Python使用scrapy抓取网站sitemap信息的方法.分享给大家供大家参考.具体如下: import re from scrapy.spider import BaseSpider from scrapy import log from scrapy.utils.response import body_or_str from scrapy.http import Request from scrapy.selector import HtmlXPathSelector c

利用NodeJS和PhantomJS抓取网站页面信息以及网站截图_javascript技巧

利用PhantomJS做网页截图经济适用,但其API较少,做其他功能就比较吃力了.例如,其自带的Web Server Mongoose最高只能同时支持10个请求,指望他能独立成为一个服务是不怎么实际的.所以这里需要另一个语言来支撑服务,这里选用NodeJS来完成. 安装PhantomJS 首先,去PhantomJS官网下载对应平台的版本,或者下载源代码自行编译.然后将PhantomJS配置进环境变量,输入 $ phantomjs 如果有反应,那么就可以进行下一步了. 利用PhantomJS进行简

Python使用代理抓取网站图片(多线程)_python

一.功能说明:1. 多线程方式抓取代理服务器,并多线程验证代理服务器ps 代理服务器是从http://www.cnproxy.com/ (测试只选择了8个页面)抓取2. 抓取一个网站的图片地址,多线程随机取一个代理服务器下载图片二.实现代码 复制代码 代码如下: #!/usr/bin/env python#coding:utf-8 import urllib2import reimport threadingimport timeimport random rawProxyList = []ch

合理优化网站结构 吸引蜘蛛深入抓取网站内容

蜘蛛来到网站是好事,但是通过蜘蛛访问记录我却发现了很大的一个问题,往往蜘蛛来到网站之后抓取了4,5个页面就离开了,这是怎么一回事呢?相信很多站长都感觉到从6月份的事件之后,百度蜘蛛很不稳定吧,我的网站也是一样,从6月份过后蜘蛛每次来了抓取几个页面就走了,这样网站的收录也一直没有提升上去,最后我对网站进行了一次大检查,然后对网站的链接进行了整理,还别说,经过整理后的网站,蜘蛛每次来抓取的页面达到了20.30,下面我来分享一下我的检查方法与整治方法. 我觉得蜘蛛刚开始不深入的原因第一种可能是导航链接