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

Reply via email to