New and changed information
This document provides procedures for configuring the NGINX rate limit feature. The following table provides an overview of the significant changes to this guide up to this current release.
Release |
Feature |
---|---|
Initial release of document |
Initial release of document. |
APIC release 6.1(2) |
Support for custom throttle group. |
Understanding the NGINX rate limit feature
NGINX provides REST API services to clients who can read and configure the Cisco ACI fabric. Clients could be the APIC GUI or scripts that have been developed by you or by Cisco.
These services are provided to verify the authentication procedure. If a client sends multiple requests that competes with other applications, then the serviceability of NGINX gets affected for any trusted client as well. For example, if a script sends the same requests in a loop, that will result in the requests being handled in a certain sequence, which will leave other requests waiting for a long period of time where those other requests will eventually time out.
Beginning with Cisco APIC Release 4.2(3), the NGINX rate limit feature has been introduced to avoid this situation. This solution, known as global throttling is applicable across all applications and processes. A new option for the NGINX rate limit feature, called as custom throttle group, prioritizes clients and applications based on the assigned throttle rate. For more details, see the next section, Custom throttle group.
Note |
This procedure describes how to configure the NGINX rate limit (global throttling). For information on configuring HTTP and HTTPS AAA login throttling, see "Configuring HTTP and HTTPS Throttling Using the CLI" in the Cisco APIC REST API Configuration Guide. |
Custom throttle group
Beginning with APIC release 6.1(2), you can use the custom throttle group feature which allows for prioritization of different clients and applications and adjusts the throttle rates for the applications. Using custom throttle group, you can assign a throttling rate to the required clients using an appropriate tag in their HTTP header of REST API requests. The requests that carry the tag, "Ratelimit-Tag", in the HTTP header are rate-limited accordingly. You can configure a maximum of three throttling groups with the custom tag and rate. Each group can be assigned one tag. Each of these groups are configurable to a maximum of 20 processes per second. This feature is disabled by default.
Read queries through the custom throttle group are given higher priority to access the APIC database compared to the queries throttled by the global throttling or queries without any throttling when the global throttling is disabled. The read queries from the APIC GUI are always prioritised over custom or global throttling.
Note |
The custom rate-limit is supported only for HTTPS. |
Configuring global throttling using the GUI
Procedure
Step 1 |
Navigate to default management access policy. , then select theThe properties window for the default management policy is displayed. |
Step 2 |
Determine if you want to enable global throttling for HTTP or HTTPS requests.
|
Step 3 |
When you have finished setting the global throttle rate for HTTP or HTTPS requests, click Submit in the lower right corner of the window. |
Configuring global throttling using the NX-OS Style CLI
Prior to Cisco APIC Release 4.2(3), the following throttling commands were only available through the NX-OS style CLI:
-
enable-throttle: Used to enable HTTP or HTTPS AAA login or refresh throttling.
-
throttle: Used to set the throttle rate used for HTTP or HTTPS communication service after enabling throttling using the enable-throttle command.
Beginning with Cisco APIC Release 4.2(3), the following throttling command is now also available:
-
global-throttle: Used to enable global throttling for HTTP or HTTPS requests.
Note the following behaviors, depending on which throttling command is enabled or disabled:
-
When enable-throttle is disabled and global-throttle is enabled, the login or login refresh is counted as one of the requests in global rate-limiting, but is not counted as login-specific rate-limiting.
-
When enable-throttle is enabled and global-throttle is disabled, only the login or login refresh is affected.
Procedure
Step 1 |
Navigate to the area in the CLI where you can configure the default communication policy: Example:
|
||
Step 2 |
Determine if you want to enable global throttling for HTTP or HTTPS requests.
|
||
Step 3 |
Enable global throttling for the HTTP or HTTPS requests. Example:
|
||
Step 4 |
Set the global throttling rate for the HTTP or HTTPS requests:
Example:
|
||
Step 5 |
Set the global throttling unit for the HTTP or HTTPS requests.
|
||
Step 6 |
To disable global throttling for the HTTP or HTTPS requests: Example:
|
||
Step 7 |
Exit the configuration area for the default communication policy in the CLI. Example:
|
Configuring global throttling using the REST API
Procedure
Step 1 |
Configure the NGINX rate limit feature through the REST API. The following configurable properties are added to the communication policy, where:
|
Step 2 |
To enable the NGINX rate limit feature:
The rate can be configured using a range of 1 to 40, which could be rate per second or rate per minute. |
Step 3 |
To disable the NGINX rate limit feature:
|
Configure custom throttle group using the REST API
Use this procedure to configure a custom throttle group. The configurable properties are:
-
adminST: enables the custom throttle groups. Only the groups for which the tag is configured are enabled. Each group can be assigned only one tag.
-
tag: tag value to be used for the HTTP Header "Ratelimit-Tag". API requests with such a tag are throttled with the configured rate.
You can configure a maximum of three tags for custom throttle groups, one for each group. For example, "tag1" and "ratePerSec1" are for custom group 1. If the value for "tagX" is left empty, "ratePerSecX" is not activated.
-
ratePerSec: throttle rate (requests per second).
You can either use the .json
or .xml
files.
Setting the custom rate limit using JSON:
POST - {{apic}}/api/mo/uni/fabric/comm-default/https/customRl.json
BODY -
{
"commCustomRl": {
"attributes": {
"adminSt":"enabled",
"tag1":"<tag1>"
"ratePerSec1":"<rate>"
"tag2":<tag2>"
"ratePerSec2":"<rate>"
"tag3":<tag3>"
"ratePerSec3":"<rate>"
}
}
}
Setting the custom rate limit using XML:
POST - {{apic}}/api/mo/uni/fabric/comm-default/https/customRl.xml
BODY -
<commCustomRl
adminSt="enabled"
tag1="<tag>"
ratePerSec1="<rate>"
tag2="<tag>"
ratePerSec2="<rate>"
/>