在网上找一些关于Haproxy对于过速防御的解决办法,大致上就找到两种:

  1. 对于整体请求速度的控制
  2. 对于某个IP的请求速度的控制

这两种方式都不太好,第一种太过粗粒度,第二种容易误伤(如果多个客户端从同一台路由设备过来)。

设想一种基于Cookie的防御方法,因为Cookie里有记录SESSIONID这样的数据,如果针对SESSIONID进行过速请求防御,那么粒度就足够精细了。

下面是配置文件样例:

frontend http-in
  # 创建stick-table,记录 cookie value -> 最近30秒内http请求次数
  stick-table type string len 50 size 1m expire 10m store http_req_rate(30s)
  # 将cookie(SESSION)作为key,存到stick-table中,并且计数
  http-request track-sc0 req.cook(SESSION)
  # 定义ACL,请求次数是否超过100
  acl abuse sc0_http_req_rate gt 100
  # 如果ACL为true,则拒绝http请求,响应429
  http-request deny deny_status 429 if abuse

如果你在haproxy里启用了如下配置:

stats socket /var/run/haproxy/haproxy.sock mode 0600 level admin

那么可以通过Socket Command在Haproxy运行时查看stick-table中的数据:

echo 'show table http-in' |  sudo socat  /var/run/haproxy/haproxy.sock -
在网上找一些关于Haproxy对于过速防御的解决办法,大致上就找到两种:对于整体请求速度的控制对于某个IP的请求速度的控制这两种方式都不太好,第一种太过粗粒度,第二种容易误伤(如果多个客户端从同一台路由设备过来)。设想一种基于Cookie的防御方法,因为Cookie里有记录SESSIONID这样的数据,如果针对SESSIONI...
haproxy 能够从 请求 报文,响应报文,从客户端或者服务器端,从表,环境信息等中提取数据,提取这样的数据的动作我们称之为获取样本,进行检索时,这些样本可以用来实现各种目的,比如作为粘滞表的键,最常用的用途是,根据预定义的模式来进行匹配。访问控制列表(ACL)提供一个灵活方案进行内容切换,或者从 请求 ,响应,任何环境状态中提取的数据基础之上做出决策,控制列表的原则很简单: 从数据流,表,环境中提取数据样本 对提取的样本可选的应用格式转换 对一个样本应用一个或多个模式匹配 当模式匹配样本时才执行动作 《nginx限制 请求 之一:(ngx_http_limit_conn_module)模块》 《nginx限制 请求 之二:(ngx_http_limit_req_module)模块》 《nginx限制 请求 之三:Nginx+Lua+Redis 对 请求 进行限制》 《nginx限制 请求 之四:目录进行IP限制》 《Redis实现访问控制频率》 为了避免出现服务的雪崩,我们需要对服务做容灾处理。 常规的服务容灾处理思路有: syn flood攻击是通过发送大量SYN包到一台服务器,使其饱和或者至少造成其上行带宽饱和。 如果攻击规模很大,已经撑满了你的所有Internet带宽,那么唯一的 方法 就是 请求 你的ISP给与协助。 我们本地的 HAProxy 上可以做一点简单防护,聊胜于无。 修改/etc/sysctl.conf,加入如下内容:
haproxy 的stick-table,很有用,但很抽象,不好理解。之前生吞活剥翻译了一份 haproxy 官方blog的文档,自己都觉得非常不满意,因此删除了那篇blog文章,我又参考了几份老外的文档,仔细琢磨了一下stick-table,在此把我的理解写一下,希望能帮到有需要的人,转载请注明来自 http://blog.sina.com.cn/polygun2000 的博客. 第一部分: 理解ha...
转载自:http://www.360doc.com/content/17/0328/19/41512315_640903721.shtml 本文是我给公司内部写的一个简单的配置文档,文中只有配置步骤,省掉了原理说明部分。 polygun2000原创,转载请注明: 来源于polygun2000博客 http://blog.sina.com.cn/polygun2000 一、功能需求 1.四层...
HAProxy 源代码阅读指引 HAProxy 是一款性能优异的高可用proxy 软件,在抽空整理其源代码与文档之后,感叹作者编码水平之高,项目注释之清晰、文档之齐全,阅读代码过程中让人欲罢不能,往往回首已经2、3个小时过去了。特此记录学习路线在此,供其他朋友借鉴。 你值得在 HAProxy 的源码中徜徉200个小时! 你可以在 HAProxy 的源代码中学习到如何写一个优秀的高性能软件! 你可以...
现象2:查看 haproxy 日志会有部分显示端口耗尽 Jan  9 14:59:04 127.0.0.1 haproxy [37]: Connect() failed for backend ha-proxy: no free ports. Jan  9 14:59:04 127.0
在早期的计算机领域,限流技术(time limiting)被用作控制网络接口收发通信数据的速率。 可以用来优化性能,减少延迟和提高带宽等。 现在在互联网领域,也借鉴了这个概念, 用来为服务控制 请求 的速率, 如果双十一的限流, 12306的抢票等。 即使在细粒度的软件架构中,也有类似的概念。 两种常用算法 令牌桶(Token Bucket)和漏桶(leaky bucket)是 最常用的两种限流...
定义被限制的IP:aclwebhdr_beg(host)-iwww.51yunv.com acldeny_ipsrc221.234.129.154匹配acl进行限制: 方法 一:http-requestdenyifwebdeny_ip 方法 二:blockifwebdeny_ip 解释:访问www.51yunv.com,并且源IP为221.234.129...
大部分程序员可能都有过“ 爬虫 ”的经历,使用python+scrapy可以很快的实现一个 爬虫 程序,爬取各种心仪的数据。但做为网站或数据提供方,则是极度讨厌这种“不劳而获”的行为的,公司辛辛苦苦积累的数据,几行代码就拿走了,因此会配置各种各样的防 爬虫 策略。因此现实中,上演着一场又一场的攻防大战。   防 爬虫 功能的本质就是区分是否为正常 请求 ,常见的几种防 爬虫 手段有: IP访问频率限制; User-...
测试场景1:已经进入应用的 请求 请求 尚未响应完毕。将 haproxy 此应用的状态改成下线。 请求 是否能够正常响应到客户端。 测试场景2:已经进入应用的 请求 ,将应用Kill -9 关闭掉, haproxy 是否能够自动重试,将 请求 分发到其他应用。 1.在controller加入代码: @RequestMapping("/testSlowResponse.do") @ResponseBod...
keepalived和 haproxy 都是用于实现高可用性的工具,但是它们的功能和应用场景有所不同。 keepalived是一个基于VRRP协议的软件,主要用于实现服务器的故障转移和负载均衡。它可以监控服务器的状态,当主服务器出现故障时,自动将流量转移到备份服务器上,从而保证服务的可用性。同时,keepalived还支持负载均衡功能,可以将流量分发到多个服务器上,提高系统的性能和可扩展性。 haproxy 是一个高性能的负载均衡器,可以将流量分发到多个服务器上,从而提高系统的性能和可扩展性。它支持多种负载均衡算法,可以根据不同的应用场景进行配置。同时, haproxy 还支持会话保持和健康检查等功能,可以保证服务的可用性和稳定性。 总的来说,keepalived主要用于实现服务器的故障转移和负载均衡,而 haproxy 则是一个专业的负载均衡器,可以提供更加丰富的负载均衡功能和性能优化。在实际应用中,可以根据具体的需求选择合适的工具来实现高可用性。