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

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

是否有人知道使用 HAProxy 的方法,一旦达到一定的最大请求数,就会将传入请求添加到延迟中,而不仅仅是拒绝或发送状态代码,实际上对特定 IP 地址的请求进行排队,如果数量不是太多,则在数量减少到足够多时允许。

使用文档时,上述所有部分似乎都可以独立完成,但组合起来似乎是一个问题。

我的前端有以下内容:

#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

是我的沥青坑,虽然我确实减慢了它们的速度,但其行为方式并不像我最初想象的那样。

在监听中创建速率限制表如下:

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

非常感谢

相关内容