Wie die Facade RateLimiter funktioniert
Das Rate Limiting in Laravel setzt sich aus der Klasse Illuminate\Cache\RateLimiting\Limit und der Facade RateLimiter zusammen. Intern speichert es Zähler im Cache-Treiber (standardmäßig File oder Redis) und verfolgt so die Anzahl der Anfragen.
Die Middleware throttle führt für jede Anfrage die per RateLimiter::for() definierte Closure aus und liefert bei Überschreitung 429 Too Many Requests.
Definition eigener Limiter im AppServiceProvider
Die Rate-Limit-Konfiguration erfolgt in der boot()-Methode von App\Providers\AppServiceProvider.
RateLimiter::for() ist der Limiter-Name, den die Middleware throttle verwendet. Die Closure als zweites Argument muss eine Instanz von Illuminate\Cache\RateLimiting\Limit zurückgeben.
Rate Limits nach Nutzer, IP-Adresse oder Plan
Unterschiedliche Limits für authentifizierte Nutzer und Gäste
Limits nach Nutzerplan
Globales Limit je IP-Adresse
Throttling pro IP-Adresse, unabhängig vom Endpunkt.Mehrere Limits kombinieren
Ein Array führt dazu, dass alle Limits ausgewertet werden. Sobald eines erreicht wird, folgt429.
Wenn Sie mehrere Limits mit demselben
by-Wert definieren, versehen Sie die Keys mit Präfixen, damit sie nicht kollidieren.Angabe eigener Limiter-Namen an der throttle-Middleware
Übergeben Sie den definierten Limiter-Namen an die Middleware throttle.
Registrierung in bootstrap/app.php
Ab Laravel 11 verwalten Sie Middleware in bootstrap/app.php.
Beispielhafte Anwendung auf API-Routen
1
Limiter definieren
Definieren Sie im
AppServiceProvider mehrere Limiter.2
Middleware an Routen anwenden
Response-Header (X-RateLimit-*)
Die Middleware throttle fügt Limit-Infos automatisch als Response-Header an.
Eigene Response zurückgeben
Manuelle Prüfung mit RateLimiter::attempt()
Wenn Sie das Rate Limit unabhängig von der throttle-Middleware zu einem beliebigen Zeitpunkt im Code prüfen wollen, nutzen Sie RateLimiter::attempt().
Anzahl der Versuche prüfen und zurücksetzen
Beispiel: Login-Throttling
Response-basiertes Rate Limiting
Wenn nur bestimmte Responses gezählt werden sollen, verwenden Sieafter(). Ein Beispiel, das nur 404-Responses zählt, um Enumeration-Angriffe zu verhindern:
Rate Limiting mit Redis
Wenn Sie den Cache-Standardtreiber auf Redis umstellen, nutzt auch diethrottle-Middleware automatisch Redis.
Redis-Treiber konfigurieren
throttleWithRedis verwenden
Für die Redis-optimierte Throttle-Middleware rufen Sie in bootstrap/app.php die Methode throttleWithRedis() auf.
throttle-Middleware auf die Klasse ThrottleRequestsWithRedis gemappt und nutzt atomare Redis-Operationen für präzises Zählen.
Vorteile von Redis
- Horizontal skalierbar — Zähler werden über mehrere Serverinstanzen geteilt.
- Hohe Genauigkeit — atomare Operationen verhindern Race Conditions.
- TTL-Verwaltung — die native Ablaufzeit von Redis löscht die Zähler automatisch.
Verwandte Seiten
Cache
Erfahren Sie mehr über Konfiguration und Verwendung der Laravel-Cache-Treiber inklusive Redis.