- Configuración de ejemplo
- Directivas
- limit_req
- limit_req_dry_run
- limit_req_log_level
- limit_req_status
- limit_req_zone
- Variables incrustadas
los ngx_http_limit_req_module
El módulo (0.7.21) se usa para limitar la tasa de procesamiento de solicitudes por una clave definida, en particular, la tasa de procesamiento de solicitudes provenientes de una única dirección IP. La limitación se realiza mediante el método de “cubeta con fugas”.
Configuración de ejemplo
http { limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; ... server { ... location /search/ { limit_req zone=one burst=5; }
Directivas
Sintaxis: | limit_req |
---|---|
Defecto: | – |
Contexto: | http , server , location |
Establece la zona de memoria compartida y el tamaño máximo de ráfaga de solicitudes. Si la tasa de solicitudes excede la tasa configurada para una zona, su procesamiento se retrasa de tal manera que las solicitudes se procesan a una tasa definida. Las solicitudes excesivas se retrasan hasta que su número excede el tamaño máximo de ráfaga, en cuyo caso la solicitud finaliza con un error. De forma predeterminada, el tamaño máximo de ráfaga es igual a cero. Por ejemplo, las directivas
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; server { location /search/ { limit_req zone=one burst=5; }
no permita más de 1 solicitud por segundo en promedio, con ráfagas que no superen las 5 solicitudes.
Si no se desea retrasar las solicitudes excesivas mientras se limitan las solicitudes, el parámetro nodelay
debería ser usado:
limit_req zone=one burst=5 nodelay;
los delay
El parámetro (1.15.7) especifica un límite en el que se retrasan las solicitudes excesivas. El valor predeterminado es cero, es decir, todas las solicitudes excesivas se retrasan.
Podría haber varios limit_req
directivas. Por ejemplo, la siguiente configuración limitará la tasa de procesamiento de solicitudes provenientes de una única dirección IP y, al mismo tiempo, la tasa de procesamiento de solicitudes por parte del servidor virtual:
limit_req_zone $binary_remote_addr zone=perip:10m rate=1r/s; limit_req_zone $server_name zone=perserver:10m rate=10r/s; server { ... limit_req zone=perip burst=5 nodelay; limit_req zone=perserver burst=10; }
Estas directivas se heredan del nivel de configuración anterior si y solo si no hay limit_req
directivas definidas en el nivel actual.
Sintaxis: | limit_req_dry_run on | off; |
---|---|
Defecto: | limit_req_dry_run off; |
Contexto: | http , server , location |
Esta directiva apareció en la versión 1.17.1.
Habilita el modo de funcionamiento en seco. En este modo, la tasa de procesamiento de solicitudes no está limitada; sin embargo, en la zona de memoria compartida, el número de solicitudes excesivas se contabiliza como de costumbre.
Sintaxis: | limit_req_log_level |
---|---|
Defecto: | limit_req_log_level error; |
Contexto: | http , server , location |
Esta directiva apareció en la versión 0.8.18.
Establece el nivel de registro deseado para los casos en los que el servidor se niega a procesar solicitudes debido a que la tasa se excede o retrasa el procesamiento de solicitudes. El nivel de registro para retrasos es un punto menos que para rechazos; por ejemplo, si “limit_req_log_level notice
“Se especifica, los retrasos se registran con el info
nivel.
Sintaxis: | limit_req_status code; |
---|---|
Defecto: | limit_req_status 503; |
Contexto: | http , server , location |
Esta directiva apareció en la versión 1.3.15.
Establece el código de estado que se devolverá en respuesta a solicitudes rechazadas.
Sintaxis: | limit_req_zone |
---|---|
Defecto: | – |
Contexto: | http |
Establece parámetros para una zona de memoria compartida que mantendrá los estados de varias claves. En particular, el estado almacena el número actual de solicitudes excesivas. los key
puede contener texto, variables y su combinación. Las solicitudes con un valor de clave vacío no se contabilizan.
Antes de la versión 1.7.6, un
key
podría contener exactamente una variable.
Ejemplo de uso:
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
Aquí, los estados se mantienen en una zona “uno” de 10 megabytes, y una tasa de procesamiento de solicitudes promedio para esta zona no puede exceder 1 solicitud por segundo.
La dirección IP de un cliente sirve como clave. Tenga en cuenta que en lugar de $remote_addr
, los $binary_remote_addr
La variable se usa aquí. los $binary_remote_addr
El tamaño de la variable es siempre de 4 bytes para direcciones IPv4 o de 16 bytes para direcciones IPv6. El estado almacenado siempre ocupa 64 bytes en plataformas de 32 bits y 128 bytes en plataformas de 64 bits. Una zona de megabyte puede mantener alrededor de 16 mil estados de 64 bytes o alrededor de 8 mil estados de 128 bytes.
Si se agota el almacenamiento de la zona, se elimina el estado utilizado menos recientemente. Si incluso después de eso no se puede crear un nuevo estado, la solicitud finaliza con un error.
La tasa se especifica en solicitudes por segundo (r / s). Si se desea una tasa de menos de una solicitud por segundo, se especifica en solicitud por minuto (r / m). Por ejemplo, la mitad de la solicitud por segundo es 30r / m.
los sync
El parámetro (1.15.3) habilita la sincronización de la zona de memoria compartida.
los
sync
El parámetro está disponible como parte de nuestro suscripción comercial.
Además, como parte de nuestra suscripción comercial, la información de estado para cada zona de memoria compartida se puede obtener o restablecer con la API desde 1.17.7.
Variables incrustadas
$limit_req_status
- mantiene el resultado de limitar la tasa de procesamiento de solicitudes (1.17.6):
PASSED
,DELAYED
,REJECTED
,DELAYED_DRY_RUN
, oREJECTED_DRY_RUN