En la configuración de Nginx, cuando desea limitar la velocidad de procesamiento de solicitudes utilizando limit_req_zone
/ limit_req instructions
, realmente no entiendo el uso de la nodelay
opción.
Según tengo entendido, finaliza las solicitudes por encima de la tasa definida sin retrasarlas. Entonces parece equivalente a burst=0
. Por eso no entiendo el siguiente ejemplo:
limit_req zone=one burst=5 nodelay;
burst
define el número de solicitudes que podrían retrasarse, entonces, ¿cuál es el significado de definir burst
si existe la nodelay
opción?
limit_req_zone $binary_remote_addr zone=flood:10m rate=6r/s; limit_req zone=flood burst=0;
que permite 6 solicitudes por segundo y lalimit_req_zone $binary_remote_addr zone=flood:10m rate=1r/s; limit_req zone=flood burst=5 nodelay;
que también permite 6 solicitudes por segundo?Los comentarios sobre la respuesta original parecen incorrectos.
La pregunta en cuestión es cuál es la diferencia entre, digamos, tasa = ráfaga de 6r / s = 0 y tasa = ráfaga de 1r / s = 5 nodos
Las respuestas son excelentes para explicar la diferencia cuando la opción de nodolay NO está presente, en cuyo caso, las solicitudes se ponen en cola con la ráfaga, y son 503 sin la ráfaga.
La respuesta original parece acertada: con nodelay, las solicitudes de ráfaga se procesan de inmediato. Y por lo tanto, la única implicación de esto es que NO hay diferencia entre especificar una ráfaga + nodolay vs. solo especificar un límite superior con busrt = 0 en primer lugar.
Por lo tanto, para responder de manera más sucinta a la pregunta OP: el significado de ráfaga cuando se especifica nodelay es lo mismo que especificar una velocidad mayor sin ráfaga.
fuente
nodelay
, ¿eso no significa que esas solicitudes se procesan inmediatamente en lugar de ponerlas en cola?Con
burst
ynodelay
especificado, me resulta más fácil entender el mecanismo de esta manera (al revés de lo que generalmente se entiende):burst
solicitudes. Con$binary_remote_addr
ese es el número máximo de solicitudes que acepta de una dirección determinada. Cada solicitud aumenta un contador interno. Cuando el contador alcanzaburst
todas las solicitudes adicionales, se deniegan (y el contador no aumenta más allá delburst
valor).rate
.Esta lógica sugiere que tiene mucho sentido especificar un
burst
valor alto (por ejemplo, 100 y más) y unrate
valor bajo (incluso algo así como 2r / s). Esto maneja la navegación normal (un lote de solicitudes paralelas seguidas de un período de silencio) mejor mientras protege contra el flujo continuo de solicitudes de bot.fuente
Le hice la pregunta de Nicolas al tipo que escribió la siguiente publicación en el sitio web nginx. Limitación de velocidad NGINX . Su respuesta es la siguiente
fuente
Basado en la excelente respuesta de Dan y en el código fuente de nginx , un resumen conciso del
nodelay
comportamiento parece ser el siguiente:burst
es cuántas nuevas solicitudes concurrentes están permitidas.rate
es cuántas solicitudes nuevas concurrentes se vuelven viejas por unidad de tiempo. (Esta actualización ocurre gradualmente: una vez por solicitud pero no por segundo).fuente
Sugiero leer este hilo: limit_req_zone limit por ubicación / proxy
y esta respuesta: stackoverflow
fuente