Sunt foarte confuz și nu pot găsi răspunsul: ce ar determina oprirea execuției liniilor de configurare în haproxy sau toate ar fi executate și evaluate la sfârșit?
Aveam impresia că un dacă este condițional http-request deny [...]
s-ar declanșa, ar opri execuția chiar acolo, dar apoi unele exemple nu au niciun sens.
Exemplu (din haproxy docs):
frontend fe_main
lega :80
# definiți tabelul stick
tip stick-table dimensiune ip 100k expiră 24 de ore magazin http_req_rate(5s),gpc0,gpt0
# începeți să urmăriți cererile unde cheia din tabel
# este IP-ul sursă al clientului
http-request track-sc0 src
# clientul a depășit 20 de solicitări în 5 secunde?
acl depășește_rate_limit sc_http_req_rate(0) gt 20
# semnalați-le dacă au depășit limita
http-request sc-set-gpt0(0) 1 dacă depășește_rate_limit
# dacă au depășit limita de 3 ori, marcați-i ca viteză cunoscut
acl known_speeder sc_get_gpc0(0) ge 3
# respinge toți clienții care depășesc limita sau sunt vitezători cunoscuți
http-request deny deny_status 429 dacă depășește_rate_limit || cunoscut_viteză
# numără de fiecare dată când depășesc limita dacă au fost semnalate
acl issue_speeding_ticket sc_get_gpt0(0) eq 1
http-request sc-inc-gpc0(0) dacă issue_speeding_ticket
# resetați steagul
http-request sc-set-gpt0(0) 0
default_backend be_servers
Dacă http-request deny
ar opri execuția (așa cum am crezut că va fi), atunci pentru două cazuri acest lucru nu va funcționa așa cum s-a intenționat, nu?
- Dacă clientul trimite o încărcare susținută peste limită de solicitări HTTP, acl
depășește_limita_rată
evaluează la adevărat, astfel încât http-request deny
va face sc-inc-gpc0
linia inaccesabilă și nu va fi emisă nicio amenda de viteză.
- În cazul în care clientul depășește limita tarifului și apoi se oprește pentru totdeauna, nu se va emite nicio amendă pentru depășirea vitezei, deoarece ultima solicitare a fost respinsă, similar cazului anterior.
- În cazul în care clientul depășește limita de tarif și apoi încetinește pentru a nu mai depăși limita (și astfel se comportă din nou) se va emite avizul pentru depășire. Acesta este inversul a ceea ce m-aș fi așteptat să se întâmple.
Dacă http-request deny
nu oprește execuția, atunci este foarte ambiguu ce s-ar întâmpla cu cererea? Dacă altul http-cerere
potriviri de linie; va castiga ultimul?
Imaginea de ansamblu aici este că încerc să realizez ceva similar cu exemplul de caz de utilizare.Am nevoie de un tabel care să enumere de câte ori un IP sursă a atins limita de rată (dar doar numărat o dată pentru menținerea unei stări de depășire a limitei de rată).
Nu reușesc să găsesc o sursă autorizată despre ordinea de execuție a regulilor în fișierele de configurare haproxy în documentație. Poate imi scapa ceva.