Hoe de RateLimiter-facade werkt
De rate limiting van Laravel bestaat uit de klasse Illuminate\Cache\RateLimiting\Limit en de RateLimiter-facade. Intern worden tellers opgeslagen in een cachedriver (standaard file of Redis) om het aantal requests te volgen.
De throttle-middleware voert voor een binnenkomend request de closure uit die je met RateLimiter::for() hebt gedefinieerd, en geeft 429 Too Many Requests terug wanneer de limiet is bereikt.
Custom limiters definiëren in de AppServiceProvider
De rate-limitingconfiguratie doe je in de boot()-methode van App\Providers\AppServiceProvider.
RateLimiter::for() is de naam van de limiter, die je gebruikt om ernaar te verwijzen vanuit de throttle-middleware. De closure in het tweede argument moet een Illuminate\Cache\RateLimiting\Limit-instantie teruggeven.
Rate limits per gebruiker, IP-adres en plan
Verschillende limieten voor ingelogde gebruikers en gasten
Limieten op basis van het plan van de gebruiker
Een globale limiet op basis van het IP-adres
Throttling per IP-adres, onafhankelijk van een specifiek endpoint.Meerdere limieten combineren
Geef je een array terug, dan worden alle limieten geëvalueerd. Zodra er één wordt bereikt, volgt een429.
Als je meerdere limieten met dezelfde
by-waarde definieert, voeg dan een prefix toe zodat de sleutels niet botsen.De throttle-middleware en een custom limiternaam opgeven
Geef de gedefinieerde limiternaam door aan de throttle-middleware.
Registratie in bootstrap/app.php
Sinds Laravel 11 beheer je middleware in bootstrap/app.php.
Toepassingsvoorbeeld op API-routes
1
Definieer de limiters
Definieer meerdere limiters in de
AppServiceProvider.2
Pas de middleware toe op de routes
Hoe de responseheaders (X-RateLimit-*) werken
De throttle-middleware voegt de limietinformatie automatisch toe aan de responseheaders.
Een custom response teruggeven
Handmatig controleren met RateLimiter::attempt()
Wil je zonder de throttle-middleware op een willekeurig moment in je code een rate limit controleren, dan gebruik je RateLimiter::attempt().
Het aantal pogingen controleren en resetten
Voorbeeld van loginthrottling
Responsegebaseerde rate limiting
Wil je alleen bepaalde responses meetellen, dan gebruik jeafter(). Een voorbeeld dat alleen 404-responses telt om resource-enumeratieaanvallen te voorkomen:
Rate limiting met Redis
Zodra je de standaard-cachedriver naar Redis wijzigt, gebruikt ook dethrottle-middleware automatisch Redis.
De Redis-driver configureren
throttleWithRedis gebruiken
Om de voor Redis geoptimaliseerde throttlingmiddleware te gebruiken, roep je throttleWithRedis() aan in bootstrap/app.php.
throttle-middleware gemapt op de klasse ThrottleRequestsWithRedis, die met de atomische operaties van Redis nauwkeurig telt.
De voordelen van Redis
- Ondersteuning voor horizontaal schalen — tellers kunnen worden gedeeld tussen meerdere serverinstanties
- Hoge nauwkeurigheid — atomische operaties voorkomen race conditions
- TTL-beheer — tellers worden automatisch verwijderd via de native verloopfunctionaliteit van Redis
Gerelateerde pagina’s
Cache
Bekijk de configuratie en het gebruik van de cachedrivers van Laravel, inclusief Redis.