Skip to main content

Cómo funciona la facade RateLimiter

El rate limiting de Laravel se compone de la clase Illuminate\Cache\RateLimiting\Limit y de la facade RateLimiter. Internamente guarda contadores en el driver de caché (por defecto file o Redis) y sigue el número de peticiones. El middleware throttle ejecuta la closure definida con RateLimiter::for() para la petición entrante y, si se supera el límite, devuelve 429 Too Many Requests.

Definir limitadores personalizados en AppServiceProvider

La configuración del rate limiting se hace en el método boot() de App\Providers\AppServiceProvider.
El primer argumento de RateLimiter::for() es el nombre del limitador que referenciarás desde el middleware throttle. La closure del segundo argumento debe devolver una instancia de Illuminate\Cache\RateLimiting\Limit.

Rate limits por usuario, por IP y por plan

Diferenciar entre usuarios autenticados e invitados

Limitar según el plan del usuario

Limitación global por IP

Aplica throttling a nivel de IP, con independencia del endpoint concreto.

Combinar varios límites

Si devuelves un array, se evalúan todos los límites. Cuando cualquiera se supera, se devuelve 429.
Si defines varios límites con el mismo valor by, añade prefijos para que las claves no colisionen.

Middleware throttle y nombre del limitador personalizado

Pasa al middleware throttle el nombre del limitador definido.

Registro en bootstrap/app.php

Desde Laravel 11, los middlewares se gestionan desde bootstrap/app.php.

Ejemplo de aplicación en rutas de API

1

Define los limitadores

Define varios limitadores en AppServiceProvider.
2

Aplica el middleware a las rutas

Cabeceras de respuesta (X-RateLimit-*)

El middleware throttle añade automáticamente la información del límite en las cabeceras.

Devolver una respuesta personalizada

Comprobación manual con RateLimiter::attempt()

Si quieres comprobar el rate limit en cualquier punto del código sin usar el middleware throttle, utiliza RateLimiter::attempt().

Comprobación y reset del contador

Ejemplo de throttling de login

Rate limiting según la respuesta

Para contar solo respuestas específicas, usa after(). Ejemplo que solo cuenta las respuestas 404 para prevenir enumeración de recursos:

Rate limiting con Redis

Basta con cambiar el driver de caché por defecto a Redis para que el middleware throttle lo utilice también.

Configuración del driver Redis

Usar throttleWithRedis

Para usar el middleware de throttling optimizado para Redis, llama a throttleWithRedis() en bootstrap/app.php.
Con esto, el middleware throttle se mapea a la clase ThrottleRequestsWithRedis y usa operaciones atómicas de Redis para contar con precisión.
Al usar throttleWithRedis(), asegúrate de que Redis esté disponible. Si la conexión falla, podrías rechazar todas las peticiones.

Ventajas de usar Redis

  • Escalado horizontal — puedes compartir contadores entre varias instancias.
  • Alta precisión — evita race conditions con operaciones atómicas.
  • Gestión de TTL — usa el TTL nativo de Redis para eliminar contadores automáticamente.

Páginas relacionadas

Caché

Consulta la configuración y uso de los drivers de caché de Laravel, incluido Redis.
Última modificación el 13 de julio de 2026