一样平常生产环境的web做事器资源,都被视为十分宝贵,总是希望资源都尽可能不摧残浪费蹂躏地用在做事合法用户。
但总会碰着一些恶意的客户端,频繁向web做事器发起嗅探式的要求,无论是恶意攻击或者是想从你的站点上获取到他们须要的数据资源,这些都不是网站管理员希望做事的用户。
为了降落做事器的负载,更好地做事合法用户的web要求,网站管理员希望将恶意用户封禁在web做事器上游。

网络爬虫是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。
常见的一些搜索引擎爬虫,同样会给web做事器造成压力。
如下图,是从我个人的博客(http://www.thanks.live)nginx做事器的access log里提取到的百度和搜狗搜索引擎爬虫对本站的内容爬取记录:

123.125.71.87 - - [17/Aug/2017:22:23:49 +0800] \"大众GET /index.php/tag/优化 HTTP/1.1\"大众 200 24218 \"大众-\公众 \公众Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)\"大众220.181.125.106 - - [17/Aug/2017:23:04:33 +0800] \公众GET /index.php/feed/post/difference-between-global-and-GLOBALS HTTP/1.1\公众 200 801 \"大众-\"大众 \"大众Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)\"大众

针对由于搜索引擎大量爬取造成的web做事器负载过高,我们可以通过robots.txt掌握,但这仅限于遵照Robots协议的搜索引擎,利用方法是在你的web根目录下,创建一个robots.txt文件,文件用法参看百度百科对Robots协议的先容。
值得把稳的是,封禁搜索引擎的爬取意味着会对你的站点收录、面向用户曝光产生影响,以是常日来说,会供应专门的供爬虫爬取的做事器。
当有访问到达nginx代理层时,由nginx代理识别该访问是正常的用户访问还是爬虫访问,如果是爬虫访问,则反向代理到专门的做事器,如果是正常的用户访问,则负载均衡代理到真正的web做事器。
这样既不会毁坏搜索引擎对站点的收录,也降落了web做事器不必要的负载。
以下是谢绝百度蜘蛛的nginx设置案例:

php减少http请求次数办事器谢绝频仍web要求的常用办法 Node.js

location / {if ($http_user_agent ~ \"大众Baiduspider\"大众){return 403;}}

重启nginx,并仿照百度蜘蛛的访问,返回 http 403:

仿照谢绝百度蜘蛛

如果是恶意用户仿照正常用户发起类DDOS攻击式访问web做事器呢?创造这样的客户端用户,就须要及时封禁IP,以防止给web做事器造成更大的危害。
封禁IP,常日利用Linux防火墙-iptables,参考命令如下:

iptables -I INPUT -s 60.206.194.34 -j DROP

解封禁则利用:

iptables -D INPUT -s 60.206.194.34 -j DROP

把稳:这里顺道也提一下,对付能过xinetd程序启动的网络做事,比如ftp telnet,除了利用iptables设置的办法以外,还可以通过利用TCP_Wrappers(TCP_Wrappers是一个事情在运用层的安全工具),以配置修正/etc/hosts.allow和/etc/hosts.deny文件的办法来实现, 但不是任何做事程序都能利用TCP_wrappers的,利用命令ldd /usr/sbin/sshd,如果输出中有libwrap,则解释可以利用TCP_wrappers, 即该做事可以利用/etc/hosts.allow和/etc/hosts.deny,如果输出没有libwrap则不可利用。
但是,TCP_Wrappers 不能办理我们今天主题所讲到的谢绝非常web要求的问题。

以上列举的方法,都是通过手动添加封禁的配置,实际上,在生产环境中,都该当实现自动化配置的办法。
iptables的设置更多的是故障发生或者监控创造后,彻底封禁恶意用户的方法。
在实际运维场景中,我们更多的是希望根据单个ip的访问频次,来决定是否封禁或者暂时封禁ip。
nginx为我们供应了频次掌握的Module。
限于篇幅长度,关于nginx要求频控,将不才次先容 利用Nginx实现按连接数限流 和 利用Nginx实现要求限流。

参考文献:

http://blog.csdn.net/qjc_501165091/article/details/51225984

http://www.cnblogs.com/azhqiang/p/5801975.html

http://www.nginx.cn/446.html