Hi,
I have a requirement where I need to allow only certain request rate for a
given URL.
Say /login can be accessed at the rate of 10 RPS. If I get 100 RPS, then 10
should be allowed and 90 should be denied.
Any help on how this can be achieved ?
*I tried to use the sticky table, but once it blocks it blocks for ever.
Please advise.*
frontend api_gateway
bind 0.0.0.0:80 <http://0.0.0.0/>
mode http
option forwardfor
default_backend nodes
# Set up stick table to track request rates
stick-table type binary len 8 size 1m expire 10s store
http_req_rate(10s)
# Track client by base32+src (Host header + URL path + src IP)
http-request track-sc0 base32+src
# Check map file to get rate limit for path
http-request set-var(req.rate_limit)
path,map_beg(/etc/hapee-1.8/maps/rates.map)
# Client's request rate is tracked
http-request set-var(req.request_rate)
base32+src,table_http_req_rate(api_gateway)
# Subtract the current request rate from the limit
# If less than zero, set rate_abuse to true
acl rate_abuse var(req.rate_limit),sub(req.request_rate) lt 0
# Deny if rate abuse
http-request deny deny_status 429 if rate_abuse
backend nodes
mode http
balance roundrobin
server echoprgm 10.37.9.30:11001 check