Kennt jemand einen Weg, mit HAProxy eingehende Anfragen zu einer Verzögerung hinzuzufügen, sobald eine bestimmte maximale Anzahl von Anforderungen erreicht wurde und nicht nur einen Statuscode ablehnen oder senden, sondern eine bestimmte IP-Adresse in die Warteschlange stellen ' Anfragen und wenn nicht zu viele, erlauben, sobald die Anzahl genug reduziert hat.HAProxy verlangsamt Verbindungen von bestimmten IP
Unter Verwendung der Dokumentation scheinen alle oben genannten Teile unabhängig voneinander möglich, obwohl kombiniert scheint ein Problem zu sein.
Ich habe folgendes in meinem vorderen Ende:
#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
Dann
backend 429_slow_down
mode http
timeout tarpit 5s
reqitarpit .
errorfile 500 /etc/haproxy/errors/429.http
http-request tarpit
mein tarpit ist, dass ich sie zwar langsam tat nach unten, aber verhält sich nicht so, wie anfangs dachte ich.
Die ratelimiting Tabelle wird im hören wie folgt erstellt:
listen ratelimiting
mode http
stick-table type ip size 1m expire 1h store conn_rate(5000),conn_cur
Vielen Dank
ich nicht verwenden * denke * Es gibt eine Möglichkeit, Anforderungen in einem Fall wie diesem intern einzureihen. Wenn ein Backend-Server aktive Verbindungen "maxconn" verwendet, werden zusätzliche Anforderungen intern in einer Warteschlange gehalten, bis ein Steckplatz verfügbar ist (oder einer von mehreren Zeitüberschreitungen ausgelöst wird), jedoch mit Server- oder Backend-Bereich, anstatt an einen Anforderer gebunden zu sein. –