服务器反爬虫攻略:Apache/Nginx/PHP禁止某些User Agent抓取网站

我们都知道网络上的爬虫非常多,有对网站收录有益的,比如百度蜘蛛(Baiduspider),也有不但不遵守robots规则对服务器造成压力,还不能为网站带来流量的无用爬虫,比如宜搜蜘蛛(YisouSpider)最新补充:宜搜蜘蛛已被UC神马搜索收购!所以本文已去掉宜搜蜘蛛的禁封!==>相关文章)。最近张戈发现nginx日志中出现了好多宜搜等垃圾的抓取记录,于是整理收集了网络上各种禁止垃圾蜘蛛爬站的方法,在给自己网做设置的同时,也给各位站长提供参考。

一、Apache

①、通过修改 .htaccess文件

修改网站目录下的.htaccess,添加如下代码即可(2种代码任选):

可用代码 (1):

 可用代码 (2):

②、通过修改httpd.conf配置文件

找到如下类似位置,根据以下代码 新增 / 修改,然后重启Apache即可:

二、Nginx代码

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

cd /usr/local/nginx/conf

vim agent_deny.conf

然后,在网站相关配置中的  location / {  之后插入如下代码:

如张戈博客的配置:

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

 三、PHP代码

将如下方法放到贴到网站入口文件index.php中的第一个 <?php 之后即可:

四、测试效果

如果是vps,那非常简单,使用curl -A 模拟抓取即可,比如:

模拟宜搜蜘蛛抓取:

模拟UA为空的抓取:

模拟百度蜘蛛的抓取:

三次抓取结果截图如下:

服务器反爬虫攻略:Apache/Nginx/PHP禁止某些User Agent抓取网站

可以看出,宜搜蜘蛛和UA为空的返回是403禁止访问标识,而百度蜘蛛则成功返回200,说明生效!

补充:第二天,查看nginx日志的效果截图:

①、UA信息为空的垃圾采集被拦截:

服务器反爬虫攻略:Apache/Nginx/PHP禁止某些User Agent抓取网站

 

②、被禁止的UA被拦截:

服务器反爬虫攻略:Apache/Nginx/PHP禁止某些User Agent抓取网站

因此,对于垃圾蜘蛛的收集,我们可以通过分析网站的访问日志,找出一些没见过的的蜘蛛(spider)名称,经过查询无误之后,可以将其加入到前文代码的禁止列表当中,起到禁止抓取的作用。

五、附录:UA收集

下面是网络上常见的垃圾UA列表,仅供参考,同时也欢迎你来补充。

六、参考资料

问说:http://www.uedsc.com/acquisition.html

浩海:http://www.it300.com/article-15358.html

夜空:http://blog.slogra.com/post-135.html

发表评论

gravatar

:?::razz::sad::evil::!::smile::oops::grin::eek::shock::???::cool::lol::mad::twisted::roll::wink::idea::arrow::neutral::cry::mrgreen:

刷新评论

目前评论:58   其中:访客  41   博主  17

  1. 求助 2 来自天朝的朋友 谷歌浏览器 Windows XP 北京市 中电华通

    我用的 DZ 3.1 也是被这些蜘蛛直接把服务费CPU100% LUIX系统 阿帕奇 如果要屏蔽是直接 在 通过修改 .htaccess文件 下面加上你上面的代码就行了吗?望回复 在线等 谢谢

    • 张戈 [博主] 来自天朝的朋友 谷歌浏览器 Windows 7 广东省深圳市 电信

      嗯 可以的,具体你得弄清楚是哪些爬虫,然后加黑名单。

      • 求解 2 来自天朝的朋友 谷歌浏览器 Windows XP 北京市 教育信息网

        修改以后 打开站点.htaccess里有错误,导致现在站点打开500错误。 之前遇到一搜的爬虫 疯狂

  2. 求助 2 来自天朝的朋友 谷歌浏览器 Windows XP 北京市 中电华通

    YisouSpider 还有 majestic12.co.uk 就发现这两个 疯狂的爬 一会服务器就瘫掉了 我看您用的是 WP博客程序 之前在网上也找了一些代码 加了好像没用 我用的DZ 3.1 直接把 上面的 修改 .htaccess文件 加在最下面 就行了吧  不管他那些爬虫 除了百度和 360 谷歌 其余的都封掉 烦都烦死了 

  3. 求解 2 来自天朝的朋友 谷歌浏览器 Windows XP 北京市 教育信息网

    Internal Server Error

    The server encountered an internal error or misconfiguration and was unable to complete your request.

    Please contact the server administrator, webmaster@HA59358 and inform them of the time the error occurred, and anything you might have done that may have caused the error.

    More information about this error may be available in the server error log. 出现这个。。。修改 .htaccess文件

    • 张戈 [博主] 来自天朝的朋友 谷歌浏览器 Windows 7 广东省深圳市 电信

      :???: 实在搞不定就购买付费服务吧!==>付费服务

  4. 过客 0 来自天朝的朋友 谷歌浏览器 Windows XP 辽宁省大连市 联通

    谢谢博主分享自己的经验和劳动,受益不好,再次谢过!!

    • 张戈 [博主] 来自天朝的朋友 谷歌浏览器 Windows 8.1 广东省深圳市 电信

      多交流.
      受益不好??

  5. wxo 3 来自天朝的朋友 谷歌浏览器 Windows 7 北京市 北京数字家园网络科技有限公司北京电信互联网数据中心节点

    使用了方式3,模拟空UA,返回的竟然是500!

  6. wxo 3 来自天朝的朋友 谷歌浏览器 Windows 7 北京市 北京数字家园网络科技有限公司北京电信互联网数据中心节点

    修改为nginx 层判断ua好使了。 谢谢张哥。

  7. 胡歌网摘 4 来自天朝的朋友 火狐浏览器 Windows 7 浙江省杭州市 电信

    为什么这两个分开写?
    写在一起是可以的吧?

    另外,我在猎豹浏览器v5.2.9 提交评论的滑块是拉不动的,只能换到firefox下来提交了,你看看有没有什么问题。

    • 张戈 [博主] 来自天朝的朋友 谷歌浏览器 Windows 7 广东省深圳市 联通

      完全可以写一起,另外没用过猎豹。。

      • 胡歌网摘 4 来自天朝的朋友 火狐浏览器 Windows 7 浙江省杭州市 电信

        就是chrome的修改版,你试试chrome有没有问题吧,我本机没装。

  8. WordPress主题 2 来自天朝的朋友 谷歌浏览器 Windows XP 四川省成都市 电信

    非常实用的教程,可以吧AB这类工具也给加上。

    • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Windows 7 广东省广州市 电信

      你这是多久没冒过泡了。

      • WordPress主题 2 来自天朝的朋友 谷歌浏览器 Windows 7 四川省成都市 电信

        是很少逛博客。。。。 :mrgreen:

  9. ghost 2 来自天朝的朋友 QQ浏览器  Android 4.4.2 H60-L11 Build/HDH60-L11 浙江省嘉兴市 电信

    开启https的站点还有点问题,因为HTTP_USER_AGENT并管不着https的访问…

  10. ghost 2 来自天朝的朋友 火狐浏览器 Ubuntu Linux 浙江省嘉兴市 电信

    开启https的站点还有点问题,因为HTTP_USER_AGENT并管不着https的访问…
    邮件通知审核通过,但是……??

    • 张戈 [博主] 来自天朝的朋友 Safari浏览器  Android 4.4.2 NX40X Build/KOT49H 广东省 电信

      谁说https不管useragent?用nginx去实现试试。

      • ghost 2 来自天朝的朋友 火狐浏览器 Ubuntu Linux 浙江省嘉兴市 电信

        呃,我用的是Apache2,curl测试的确是https就不拦截了Orz

        • 张戈 [博主] 来自天朝的朋友 Safari浏览器  Android 4.4.2 NX40X Build/KOT49H 广东省广州市 移动

          个人网站还是用Nginx舒服

          • ghost 2 New Zealand 谷歌浏览器 Windows 10 新西兰 电信

            最近重新折腾的时候才发现之前没有把配置写到https那个VirtualHost……折腾h2去了233

  11. 同盟源 5 来自天朝的朋友 谷歌浏览器 Windows 7 安徽省芜湖市 电信

    来屏蔽个百度的蜘蛛玩玩

  12. ua 0 来自天朝的朋友 QQ浏览器  Android 4.4.4 MI 4LTE Build/KTU84P 广东省广州市 电信

    爬虫程序不可以自己设置UA吗? 比如设置为百度的爬虫UA 。如何反这种爬虫?

  13. ghost 2 New Zealand 火狐浏览器 Unknow Os 新西兰

    把Feedly屏蔽了作甚…

  14. aoweisi 3 来自天朝的朋友 火狐浏览器 Windows 7 江苏省 移动

    博主 请教一个问题 agent 识别为 curl/7.29.0 的是什么东西 是不是抓取工具啊?

    • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Mac OS X 10_11_1 广东省深圳市 电信

      curl 是Linux下的一个命令,可以抓取可以post,很强大。

      • aoweisi 3 来自天朝的朋友 火狐浏览器 Windows 7 江苏省 移动

        哇 博主 真热心 这么快就回复了 那我问一下 这种按你说的那不是可以用作CC攻击?如果可以大GET量请求

        • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Windows 7 广东省广州市 电信

          本来就是,变态的请求那就是攻击了。

      • 爱福利 3 来自天朝的朋友 火狐浏览器 Windows 7 江苏省南京市 电信

        你的VPS用的阿里云的ECS 的话 会不会被屏蔽页面啊 听说阿里云对这块拦截挺厉害的 什么 破解软件 注册机 VPN 这些东西很容易被屏蔽掉 那怎么办的?

  15. 爱福利 3 来自天朝的朋友 火狐浏览器 Windows 7 江苏省南京市 电信

    agent:Go 1.1 package http
    我算是发现了,但凡可以写爬虫的都可以 进行采集+CC攻击!

  16. 爱福利 3 来自天朝的朋友 火狐浏览器 Windows 7 江苏省南京市 电信

    博主 Nginx日志里面 useragent 属性一般后面会跟着一个IP 那是什么 ?我发现有大量CC的攻击者 都会伪装USER agent 但是agent后面都会跟着一个IP 像这样:186.237.172.127 – – [04/Dec/2015:09:49:49 +0800] “GET /52.html?s=4415 HTTP/1.1” 500 253 “-” “Mozilla/5.0 9649” 133.130.117.212

    • 张戈 [博主] 来自天朝的朋友 Safari浏览器  Android 4.4.4 M463C Build/KTU84P 广东省广州市 电信

      目测是代理ip或请求IP

  17. google 0 来自天朝的朋友 谷歌浏览器 Windows 7 广东省广州市 电信

    我用第一种方法,把代码 加入 .htaccess 后,网站访问了不了,不知道是为什么?我的网站的zencart 系统

  18. 慕梓阁 3 来自天朝的朋友 火狐浏览器 Windows 7 江苏省 移动

    http://www.2zzt.com/jianzhan/7347.html 这篇文章怎么这么神似 又被偷文章了 ?

    • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Mac OS X 10_11_2 广东省深圳市 电信

      呵呵了。

  19. kay 0 来自天朝的朋友 谷歌浏览器 Windows 10 浙江省宁波市 联通

    站长你好^^,很感谢你提供的恶意UA列表,想提一个意见看看能不能更新下呢?
    1、赞同本文说法,YisouSpider现在已经成正规user agent了。
    2、jikeSpider盘古搜好歹也顶着个”中国搜索”的旗号,也该也不算恶意user agent吧?
    3、另外我再补充几个|Alexa Toolbar|AskTbFXTV|CoolpadWebkit|lightDeckReports Bot|DigExt|heritrix|LinkpadBot|Ezooms|^$

    • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Windows 7 广东省深圳市 电信

      已去掉盘古
      其实这篇文字分享的是一种方法,各位站长想增加想删除都可以自己定义。所以这些我就不加上去了,比如Alexa Tool 这个Alexa排名的工具条

  20. more 4 来自天朝的朋友 谷歌浏览器 Windows 7 海南省 电信

    nginx: [emerg] “if” directive is not allowed here in /usr/local/nginx/conf/vhost/agent_deny.conf:2
    OMG 不知道什么情况

    • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Mac OS X 10_11_3 广东省深圳市 电信

      include写到哪了?

      • more 4 来自天朝的朋友 谷歌浏览器 Windows 7 海南省 电信

        发现问题了 agent_deny.conf 不能放vhost里面 ,必须在上一层conf 下面,然后再include 就可以了。

        • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Windows 7 广东省广州市 电信

          本来就是这样啊,你自己没仔细看文章而已:

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

          • more 4 来自天朝的朋友 谷歌浏览器 Windows 7 海南省海口市 电信

            我原来是这样的:
            cd /usr/local/nginx/conf/vhost
            vim agent_deny.conf
            include vhost/agent_deny.conf
            发现不行,然后再
            cd /usr/local/nginx/conf
            vim agent_deny.conf
            include agent_deny.conf
            这样就可以了

            • 张戈 [博主] 来自天朝的朋友 Safari浏览器  Android 5.1.1 Redmi Note 3 Build/LMY47V 广东省深圳市 电信

              本来就不用带全路径。

  21. more 4 来自天朝的朋友 谷歌浏览器 Windows 7 海南省 电信

    发现有BUG,在nginx上设置之后,百度站长平台检测robots.txt会提示:无法访问您网站的robots.txt文件
    百度暂时无法访问您服务器上的robots.txt文件,请检查服务器的设置,确保该文件能被正常访问。错误码:403

    • more 4 来自天朝的朋友 谷歌浏览器 Windows 7 海南省 电信

      一旦不include,再去检测就正常了

  22. 渐行渐远 1 来自天朝的朋友 谷歌浏览器 Windows 10 北京市朝阳区 联通

    我设置过滤了ua为空的user_agent,用curl测试也成功了,但是为什么日志里返回的还都是200呢?求解

  23. qa 4 来自天朝的朋友 Safari浏览器  Android 4.4.2 XT1060 Build/KXA20.16-1.25.2 浙江省温州市 电信

    通过nginx校验cookie效果更佳。

  24. david 0 来自天朝的朋友 Safari浏览器  Android 4.1.1 Lenovo P770 Build/JRO03C 天津市 电信IDC机房

    你往index.php里调用wp_die()是逗我玩么?wp环境还没建立呢你就调用那不报错?

    • 张戈 [博主] 来自天朝的朋友 Safari浏览器  Android 5.1.1 Redmi Note 3 Build/LMY47V 广东省深圳市 移动

      博主很忙,没空逗你玩。
      满足恶意爬虫的访问条件才会die,没必要加载wp内核。

  25. 求助 0 来自天朝的朋友 谷歌浏览器 Windows 7 北京市 联通紫竹桥互联网数据中心

    发现有BUG,在nginx上设置之后,百度站长平台检测robots.txt会提示:无法访问您网站的robots.txt文件
    百度暂时无法访问您服务器上的robots.txt文件,请检查服务器的设置,确保该文件能被正常访问。错误码:403

    • 张戈 [博主] 来自天朝的朋友 谷歌浏览器  Android 5.1.1 Redmi Note 3 Build/LMY47V 广东省深圳市 电信

      把第二行代码中的Curl去掉,其他不变

  26. 十年如梦 1 来自天朝的朋友 Safari浏览器 iPad OS 10_2 like Mac OS X) AppleWebKit 河北省石家庄市 联通

    http301跳转https后,抓取http时会提示返回的301,抓去https提示403,这样是否工作正常呢?

    • 十年如梦 1 来自天朝的朋友 Safari浏览器 iPad OS 10_2 like Mac OS X) AppleWebKit 河北省石家庄市 联通

      找到解决方法了,在return 301前面添加include agent_deny.conf;

  27. 尧月 0 来自天朝的朋友 谷歌浏览器 Windows 10 山东省青岛市 联通

    学习了,谢谢

  28. 玉满斋 2 来自天朝的朋友 谷歌浏览器 Windows 10 河南省南阳市 电信

    为啥.htacess的我一用就是500错误,只能使用PHP的,不知道有没有效!

  29. 求助 1 来自天朝的朋友 火狐浏览器 Windows 7 浙江省衢州市 电信

    张哥,
    Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.3; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729) 这个ua 是不是爬虫啊。
    .NET CLR 是不是用java虚拟机做的爬虫呢

  30. 求助 1 来自天朝的朋友 火狐浏览器 Windows 7 浙江省衢州市 电信

    张哥,
    最近发现有人采集我的网站
    ua>Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.3; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729)
    .NET CLR 是不是指用.net做的一个爬虫程序

加载中,请稍候...