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.
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 devuelve429.
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, usaafter(). 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 middlewarethrottle 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.
throttle se mapea a la clase ThrottleRequestsWithRedis y usa operaciones atómicas de Redis para contar con precisión.
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.