通过延迟限制来自单个IP的请求

有人知道使用HAProxy的方法,一旦达到一定的最大数量的请求,将传入的请求添加到延迟,而不只是拒绝或发送状态码,实际上排队一个特定的IP地址的请求,如果不是太多,请允许数量已经减less了。

使用文档所有上述部分似乎可以独立,虽然组合似乎是一个问题。

我在前端有以下内容:

#Add counter to ip in ratelimiting table tcp-request content track-sc0 src table ratelimiting # if alot of requests (more than 1000) - reject acl mark_alot_of_requests sc0_conn_rate(ratelimiting) gt 1000 tcp-request content reject if mark_alot_of_requests TRUE #If concurrent requests >= 100 from a single IP return 429 acl mark_too_many_requests sc0_conn_cur(ratelimiting) ge 100 use_backend 429_slow_down if mark_too_many_requests 

然后

 backend 429_slow_down mode http timeout tarpit 5s reqitarpit . errorfile 500 /etc/haproxy/errors/429.http http-request tarpit 

是我的tarpit,虽然我减慢了他们,但不像我最初的想法。

ratelimiting表是在listen中创build的,如下所示:

 listen ratelimiting mode http stick-table type ip size 1m expire 1h store conn_rate(5000),conn_cur 

非常感谢