Forum Discussion
iRule Limit the number of HTTP requests by a client within a specified time
Hi Jason
Today I created one datagroup in the load balncer called
conn_limit_dg_4Request, the point of this data group with ip addresses is to have 4 request per second for each client ip address, so How can I get the 4 request per second with this iRule that I changed with the datagroup configured? will it work like this change on the iRule?
when RULE_INIT {
#This defines how long is the sliding window to count the requests. This example allows 10 requests in 1 seconds*
set static::windowSecs 1
}
when CLIENT_ACCEPTED {
#Max connections per client IP
set limit [class match -value [IP::client_addr] equals conn_limit_dg_4Request]
log local0. "[IP::client_addr]: \$limit: $limit"
}
when HTTP_REQUEST {
#Check if client IP is in the connection limit data group and the request is a GET
if { $limit ne "" and [HTTP::method] eq "GET"} {
set getCount [table key -count -subtable [IP::client_addr]]
log local0. "[IP::client_addr]: getCount=$getCount"
if { $getCount < $limit} {
incr getCount 1
table set -subtable [IP::client_addr] $getCount "" indefinite $static::windowSecs
} else { log local0. "[IP::client_addr]: exceeded the number of requests allowed. $getCount / $limit"
#HTTP header with connection limit exceed the count request
HTTP::respond 429 content "Too Many Requests"
}
}
}
Recent Discussions
Related Content
* Getting Started on DevCentral
* Community Guidelines
* Community Terms of Use / EULA
* Community Ranking Explained
* Community Resources
* Contact the DevCentral Team
* Update MFA on account.f5.com