Limit Req#
El módulo se utiliza para limitar la velocidad de procesamiento de solicitudes por una clave definida, en particular, la velocidad de procesamiento de solicitudes provenientes de una sola dirección IP. La limitación se realiza utilizando el método de “cubo con fugas” (leaky bucket). Predeterminado — http, server, location Establece la zona de memoria compartida y el tamaño máximo de ráfaga de solicitudes.
Si la velocidad de solicitudes excede la configurada para una zona, su procesamiento se retrasa de manera que las solicitudes se procesan a una velocidad definida. Las solicitudes excesivas se retrasan hasta que su número supera el tamaño máximo de ráfaga, en cuyo caso la solicitud se termina con un error.
Por defecto, el tamaño máximo de ráfaga es igual a cero. Por ejemplo, las directivas permiten no más de 1 solicitud por segundo en promedio, con ráfagas que no superen 5 solicitudes. Si no se desea retrasar las solicitudes excesivas mientras se está limitando, debe usarse el parámetro El parámetro Pueden existir varias directivas Estas directivas se heredan del nivel de configuración anterior solamente si no hay directivas Predeterminado http, server, location Activa el modo de simulación (dry run). En este modo, la velocidad de procesamiento de solicitudes no se limita, sin embargo, en la zona de memoria compartida el número de solicitudes excesivas se contabiliza como de costumbre. Predeterminado http, server, location Configura el nivel de registro deseado para los casos en que el servidor se niega a procesar solicitudes por exceso de velocidad, o retrasa su procesamiento.
El nivel de registro para retrasos es un punto menor que para rechazos; por ejemplo, si se especifica Configura el código de estado a devolver en respuesta a las solicitudes rechazadas. Configura parámetros para una zona de memoria compartida que mantendrá los estados para varias claves. En particular, el estado almacena el número actual de solicitudes excesivas.
La clave puede contener texto, variables y su combinación. Las solicitudes con un valor de clave vacío no se contabilizan. Ejemplo de uso: Aquí, los estados se mantienen en una zona de 10 megabytes Una dirección IP del cliente sirve como clave. Nótese que, en lugar de El tamaño de la variable Una zona de un megabyte puede mantener alrededor de 16 mil estados de 64 bytes o unos 8 mil estados de 128 bytes. Si se agota el almacenamiento de la zona, se elimina el estado menos utilizado recientemente.
Si incluso después de eso no se puede crear un nuevo estado, la solicitud se termina con un error. El guarda el resultado de la limitación de la velocidad de procesamiento de solicitudes: Ejemplo de configuración#
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
...
server {
...
location /search/ {
limit_req zone=one burst=5;
}
Directivas#
limit_req#
limit_req
zone=
name [burst=
number] [nodelay | delay=
number];limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
location /search/ {
limit_req zone=one burst=5;
}
nodelay
:limit_req zone=one burst=5 nodelay;
delay
especifica un límite a partir del cual las solicitudes excesivas se retrasan.
El valor por defecto es cero, es decir, todas las solicitudes excesivas se retrasan.limit_req
.
Por ejemplo, la siguiente configuración limitará la velocidad de procesamiento de solicitudes provenientes de una sola dirección IP y, al mismo tiempo, la velocidad de procesamiento de solicitudes por 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;
}
limit_req
definidas en el nivel actual.limit_req_dry_run#
limit_req_dry_run
on
| off
;limit_req_dry_run off;
limit_req_log_level#
limit_req_log_level
info
| notice
| warn
| error
;limit_req_log_level error;
limit_req_log_level notice
, los retrasos se registran con nivel info
.limit_req_status#
limit_req_zone#
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
one
, y la velocidad promedio de procesamiento de solicitudes para esta zona no puede superar 1 solicitud por segundo.$remote_addr
, aquí se utiliza la variable $binary_remote_addr
.$binary_remote_addr
es siempre de 4 bytes para direcciones IPv4 o 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.rate
se especifica en solicitudes por segundo (r/s).
Si se desea una velocidad inferior a una solicitud por segundo, se especifica en solicitudes por minuto (r/m).
Por ejemplo, media solicitud por segundo es 30r/m.Variables integradas#
$limit_req_status
#PASSED
,
DELAYED
, REJECTED
, DELAYED_DRY_RUN
o
REJECTED_DRY_RUN