Nginx反爬虫策略,防止UA抓取网站_nginx

来源:脚本之家  责任编辑:小易  

方法一:修改nginx.confserver { listen 80; server_name www.ready.com; #添加如下内容即4102可防止爬虫if ($http_user_agent ~* "qihoobot|1653Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot") { return 403; }方法2:网站更目录下增加Robots.txtwww.zgxue.com防采集请勿采集本网。

新增反爬虫策略文件:

vim /usr/www/server/nginx/conf/anti_spider.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; }#屏蔽单个IP的命令是#deny 123.45.6.7#封整个段即从123.0.0.1到123.255.255.254的命令#deny 123.0.0.0/8#封IP段即从123.45.0.1到123.45.255.254的命令#deny 124.45.0.0/16#封IP段即从123.45.6.1到123.45.6.254的命令是#deny 123.45.6.0/24# 以下IP皆为流氓#deny 58.95.66.0/24;

配置使用

在站点的server中引入

# 反爬虫 include /usr/www/server/nginx/conf/anti_spider.conf

最后重启nginx

校验是否有效

模拟YYSpider

λ curl -X GET -I -A 'YYSpider' https://www.myong.topHTTP/1.1 200 Connection establishedHTTP/2 403server: marco/2.11date: Fri, 20 Mar 2020 08:48:50 GMTcontent-type: text/htmlcontent-length: 146x-source: C/403x-request-id: 3ed800d296a12ebcddc4d61c57500aa2

模拟百度Baiduspider

λ curl -X GET -I -A 'BaiduSpider' https://www.myong.topHTTP/1.1 200 Connection establishedHTTP/2 200server: marco/2.11date: Fri, 20 Mar 2020 08:49:47 GMTcontent-type: text/htmlvary: Accept-Encodingx-source: C/200last-modified: Wed, 18 Mar 2020 13:16:50 GMTetag: "5e721f42-150ce"x-request-id: e82999a78b7d7ea2e9ff18b6f1f4cc84

爬虫常见的User-Agent

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 无用爬虫

以上就是Nginx反爬虫策略,防止UA抓取网站的详细内容,更多关于Nginx 反爬虫的资料请关注真格学网其它相关文章! 您可能感兴趣的文章:Nginx服务器屏蔽与禁止屏蔽网络爬虫的方法nginx修改配置限制恶意爬虫频率Nginx中配置过滤爬虫的User-Agent的简单方法Linux/Nginx如何查看搜索引擎蜘蛛爬虫的行为Nginx限制搜索引擎爬虫频率、禁止屏蔽网络爬虫配置示例

自己写的网站,2113不知道为啥总是有很多恶意访问的ip,根本不是正常的用户5261访问之前也有想过是否可能是运4102营商的代理服务器出口ip,但是看起来好像也不像,先不管,ban掉再说那如何来ban呢,规则比较简单,就是超过一个阈值之后,就用下面的iptables命令iptables -I INPUT -s -j DROPservice iptables saveservice iptables restart那如何统计nginx的访问ip呢,目前来说比较简单就是读取nginx的access.log文件,然后分析一下,如果一天超过阈值,我们就执行上面的命令,ban掉ip。有个问题是我们需要的是一直监视access.log 文件,而不是读一次,当然可以在每天快结束的时候事后来封住ip,但是这样不能给爬虫嚣张的气焰,所以我觉得立即封掉是比较OK的。之前写过一个类似tail读取一个文件的功能,就是打开的时候先定位到文件大小的位置,然后就开始循环读行来处理,这次的处理有点不一样,我是直接使用tail 把那个文件的流定位到我的程序的 sys.stdin ,这样就简单的可以读到所有的流了tail /var/log/nginx/access.log | python .py但是nginx的access.log每天都会做一次logrotate,它是怎么做的呢,nginx官网的推荐方式mv access.log access.log.0kill -USR1 `cat master.nginx.pid`sleep 1gzip access.log.0 # do something with access.log.0我的vps上面使用的是logrotated来处理的,1653可以在/etc/logrotate.d/nginx/var/log/nginx/*.log { daily missingok rotate 52 compress delaycompress notifempty create 640 nginx adm sharedscripts postrotate [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid` endscript}这里表示的create表示文件会重新创建。其实这样老的文件就没有新数据了,但是因为使用的是tail,也没有eof, 这样直接读的时候会发现 file.readline() 的函数会卡住,导致程序假死,这样程序就不能主动退出了,后面选择了用select来处理,加了一个10秒的超时,从目前的流量来看,基本上每秒都好多的请求,10秒都没有数据就是出问题了。while sys.stdin in select.select([sys.stdin], [], [], 10)[0]:然后如果没有select上的话,说明基本上是nginx log文件rotate掉了,所以遇到这样的情况,我就直接跳出程序,然后把程序终结掉。终结掉怎么办呢,本来想在程序里面重新启动一下程序,但是感觉可能不妥,所以使用crontab来处理了,每隔2分钟检查一下,为了防止多次启动就用了flock来防止程序重新启动*/2 * * * * flock -xn /dev/shm/blocker.lock -c "sh /srv/www/beauty/daemon/nginx_ip_blocker.sh"这里附上代码#coding=utf-8import sysimport reimport osimport urllibimport urllib2import datetimeimport time, osimport loggingimport jsonimport selectlogging.basicConfig(level=logging.DEBUG, datefmt='%Y%m%d %H:%M:%S', format='[%(asctime)s] %(message)s')"""iptables -I INPUT -s -j DROPservice iptables saveservice iptables restart本脚本主要是用来把恶意访问nginx的ip ban掉的脚本"""MAX_IP=7000def get_date(): return time.strftime("%Y%m%d")def ban_one_ip(ip): os.system("iptables -I INPUT -s %s -j DROP ; service iptables save ; service iptables restart"%ip)def find_ip_and_ban(): for ip in ip_map: if ip_map.get(ip)>MAX_IP: print "ban ip, count %s:%s"%(ip_map.get(ip),ip) ip_map[ip] = 0 ban_one_ip(ip)today = Noneip_map = {}def process_log(lines): global ip_map; global today; now = get_date() if now != today: today = now ip_map = {} for line in lines: ip = line.split(" ")[0] count = ip_map.get(ip,0) count += 1 ip_map[ip]=count; find_ip_and_ban()COUNT=50def main(): brk=False while True: tmp = 0; lines =[] brk=False while sys.stdin in select.select([sys.stdin], [], [], 10)[0]: line = sys.stdin.readline() if not line: brk=True print 'read to eof' break lines.append(line) tmp+=1 if tmp>COUNT: break else: brk=True print 'read time out' break process_log(lines) print "read lines:%s"%len(lines) if brk: break if brk: print "break out"if __name__ == "__main__": main()内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • nginx服务器基础的安全配置与一些安全使用提示
  • nginx+php(fastcgi)搭建高并发web服务器(自动安装脚本)第二版
  • nginx 禁止访问某个目录或文件的设置方法
  • iis+nginx实现负载均衡的详细步骤
  • nginx,apache的alias和认证功能
  • 使用google-perftools优化nginx在高并发时的性能的教程(完整版)
  • 一文搞懂nginx限流(简单实现)
  • nginx: [warn] "log_format" directive used only on "http" lev
  • nginx实现404页面的方法小结
  • nginx下支持thinkphp url rewrite的配置示例
  • 如何在nginx上防止恶意的ddos抓取
  • nginx网站目录怎样防止爬虫
  • nginx 怎么防止浏览器代理
  • nginx反向代理可以配防火墙吗
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全星外虚拟主机华众虚拟主机linuxwin服务器ftp服务器dns服务器tomcat nginxzabbix云和虚拟化服务器其它首页服务器nginx服务器屏蔽与禁止屏蔽网络爬虫的方法nginx修改配置限制恶意爬虫频率nginx中配置过滤爬虫的user-agent的简单方法linux/nginx如何查看搜索引擎蜘蛛爬虫的行为nginx限制搜索引擎爬虫频率、禁止屏蔽网络爬虫配置示例nginx服务器基础的安全配置与一些安全使用提示nginx+php(fastcgi)搭建高并发web服务器(自动安装脚本)第二版nginx 禁止访问某个目录或文件的设置方法iis+nginx实现负载均衡的详细步骤nginx,apache的alias和认证功能使用google-perftools优化nginx在高并发时的性能的教程(完整版)一文搞懂nginx限流(简单实现)nginx实现404页面的方法小结nginx下支持thinkphp url rewrite的配置示例nginx提示:500 internal servernginx 多站点配置方法集合权限问题导致nginx 403 forbiddenginx fastcgi错误primary scripnginx服务器的反向代理proxy_pasnginx 403 forbidden的解决办法nginx伪静态配置和常用rewrite伪详解nginx服务器中配置超时时间的nginx下301重定向域名的方法小结windows下nginx+php5的安装与配置nginx服务器配置https nginx.config 配置nginx+apache+mysql+php+memcached+squid详解nginx反向代理websocket响应403的解决详解nginx反向代理到tomcat服务器详解nginx如何配置httpsdebian下搭建nginx和tomcat服务器实现负载详解nginx如何配置继承模型nginx中共享内存的使用详解windows10 系统配置nginx文件服务器的图文详解nginx 配置文件解读
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved