Limitación de velocidad de Nginx, utilizando múltiples reglas de velocidad

Limitación de velocidad de Nginx, utilizando múltiples reglas de velocidad

Usando la limitación de velocidad de nginx, usando esta regla como ejemplo:

limit_req_zone $request_limiting_zone_key zone=request_limiting_search:20m rate=30r/m;

Esto establecerá 30 solicitudes por minuto. Sin embargo, ¿qué pasaría si quisiera acumular una segunda regla, de modo que la lógica sea "30 solicitudes por minuto o 1 solicitud por segundo. Lo que ocurra primero?"

La razón de esto es que todavía queremos un límite de 30/min, pero hay algunos intentos extraños en los que vemos un spam de 10 veces las solicitudes en un período de 1 a 2 segundos. Esto causa algunos problemas cuando las solicitudes llegan tan rápido.Por lo tanto, nos gustaría limitar a los usuarios a 1 solicitud por segundo Y un límite de 30 por minuto.

Leí la referencia del documento pero no vi mucho sobre la acumulación de diferentes reglas de tarifas.

es posible? Si es así, ¿cuál sería la sintaxis?

Respuesta1

Es perfectamente válido aplicar múltiples zonas a un mismo bloque.También puede crear varias zonas que almacenen solicitudes para la misma clave (normalmentealgún prefijo de la dirección IP del cliente). Sólo cuesta un mínimo de procesamiento y memoria.

Lo siguiente limitará a los usuarios, identificados por su dirección de red, tanto en intervalos de segundos como de minutos, y les permitirá exceder temporalmente el límite definido por breves períodos.ráfagas. Desea permitir eso, ya que hará que su sitio web parezca menos roto para los usuarios con dispositivos de entrada y/o acceso a la red poco confiables; podrían emitir la misma solicitud dos veces:

map $remote_addr $request_limiting_zone_key {
    # [..]
}
limit_req_zone $request_limiting_zone_key zone=request_limit_search_second:10m rate=1r/s;
limit_req_zone $request_limiting_zone_key zone=request_limit_search_minute:10m rate=30r/m;

 # [..]

location /search {
    limit_req zone=request_limit_search_second burst=3;
    limit_req zone=request_limit_search_minute burst=3;
}

Dicho esto, si su servidor web no puede manejar una breve ráfaga de solicitudes de búsqueda, tal vez necesite descargar su motor de búsqueda a otra máquina o aplicar un tipo diferente de límite de velocidad.Necesita un margen significativo entre el uso humano típico y el uso que excede la capacidad de su máquina.para mantenerse al día. De lo contrario, es posible que no encuentre un valor seguro entre molestar a los usuarios legítimos y no restringir el uso abusivo/de bots.

información relacionada