Rate limiting method
Use the request.limit_rate method to implement rate limiting: limit_rate fixed method signaturetag parameter when configuring tag-based rate limiting rules.
The method returns true , and the enclosing rule condition is satisfied when the request count (4), under the granularity (8), exceeds the configured threshold within the specified time window (3), using the configured filters (1, 2, 5, 6, 7, 9).
| # | Parameter name | Required | Description | |
|---|---|---|---|---|
| 1 | ip_list | False | List of IP addresses that the rule applies to. If there are no IPs in the list, counting will be done for all IPs. | |
| 2 | url | True | A regex pattern used to match the request’s URI (URL + query_params). | |
| 3 | interval | True | The time limit, in seconds, within which we only allow n number of requests to URI matching the pattern. | |
| 4 | requests | True | The maximum number of requests accepted within the given period before an action is taken (minimum value is 21 requests). | |
| 5 | method_list | False | List of method types the request aggregation will be applied to. | |
| 6 | status_list | False | List of status codes the request aggregation will be applied to. | |
| 7 | content_type | False | Regex pattern to match request content_type against. | |
| 8 | scope (granularity) | False If the granularity isn’t set to cluster, the default aggregation will be set to cluster. | When protecting the origin, you can configure rate limit rules that apply to either IPs or all requests that come through the cluster. - If you set it to IP, once the IP exceeds the threshold, the rule is triggered. This helps against individual attackers- If you set it to cluster, once the total requests (from any IP) exceed the threshold, the rule is triggered. This helps protect the origin from getting too many requests. | |
| 9 | tag | False | Aggregation of tagged (user-defined tags) requests will be applied for each IP. |
Implementation
Advanced rules via API
Best practices
Block IPs that exceed request limit for any URL
Each request will be counted individually for each IP. For example, if the IP address 1.2.3.4 sends more than 200 requests within a 5-second timeframe, it will be blocked. Another IP address, such as 1.2.3.5, will only be blocked if it exceeds the allowed threshold of 200 requests in the same time interval.Embed additional conditions
Rate limit complex URL regex
Embed IP range to the condition
Cluster (PoP) granularity
Rate limit all GET or HEAD redirected (302) requests with specific content type:Rate limit by tag filter
This functionality allows embedding user-defined tags into the rate limit condition so only tagged IPs requests will be aggregated into the rate limit mechanism. Note that my tag is a user-defined tag that should be defined in a separate rule.Clarification: rate limit aggregation and rule triggering
Rate limit aggregation is defined exclusively by the parameters of therequest.limit_rate(...) condition, such as the aggregation scope, IP list, or tags.
When request.limit_rate(...) is combined with additional conditions in the same rule, those additional conditions control when the rule action is applied, not how requests are aggregated.
For example, if a rate limit condition is configured without an IP list and combined with a condition such as request.ip == '1.2.3.4', request aggregation will still occur according to the rate limit definition. However, the rule action will only be triggered when the full rule condition evaluates to true, in this case, only for requests originating from 1.2.3.4.
This distinction is important when combining rate limiting with other conditions to help ensure the rule behaves as expected.