有人知道使用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
非常感谢