Skip to main content

Come funziona il facade RateLimiter

Il rate limiting di Laravel è formato dalla classe Illuminate\Cache\RateLimiting\Limit e dal facade RateLimiter. Internamente memorizza contatori nel driver di cache (di default file o Redis) e tiene traccia del numero di richieste. Sulla richiesta ricevuta dal middleware throttle, viene eseguita la closure definita con RateLimiter::for(): se il limite è raggiunto, viene restituito 429 Too Many Requests.

Definire un limiter personalizzato in AppServiceProvider

Definisci le impostazioni di rate limit nel metodo boot() di App\Providers\AppServiceProvider.
Il primo argomento di RateLimiter::for() è il nome del limiter, usato quando lo referenzi dal middleware throttle. La closure passata come secondo argomento deve restituire un’istanza Illuminate\Cache\RateLimiting\Limit.

Rate limit per utente, IP e piano

Limiti diversi tra utenti autenticati e ospiti

Limiti in base al piano dell’utente

Limite globale per IP

Throttling per indirizzo IP, indipendentemente da endpoint specifici.

Combinare più limiti

Restituendo un array, tutti i limiti vengono valutati. Basta che uno sia raggiunto per restituire 429.
Quando definisci più limiti con lo stesso valore di by, aggiungi un prefisso per evitare conflitti tra chiavi.

Middleware throttle e specifica del nome del limiter

Al middleware throttle passi il nome del limiter definito.

Registrazione in bootstrap/app.php

Da Laravel 11, i middleware si gestiscono in bootstrap/app.php.

Esempio di applicazione alle rotte API

1

Definire i limiter

Definisci più limiter in AppServiceProvider.
2

Applicare il middleware alle rotte

Come funzionano gli header di risposta (X-RateLimit-*)

Il middleware throttle aggiunge automaticamente alle response gli header con le informazioni di limite.

Restituire una response personalizzata

Controllo manuale con RateLimiter::attempt()

Se vuoi verificare il rate limit in un punto specifico del codice, senza usare il middleware throttle, usa RateLimiter::attempt().

Verifica dei tentativi e reset

Esempio di throttling del login

Rate limit basato sulla risposta

Se vuoi contare solo determinate response, usa after(). Esempio in cui conti solo le 404 per prevenire attacchi di enumerazione di risorse:

Rate limiting con Redis

Basta cambiare il driver di cache predefinito in Redis e anche il middleware throttle userà Redis automaticamente.

Configurazione del driver Redis

Usare throttleWithRedis

Per usare il throttling middleware ottimizzato per Redis, chiama throttleWithRedis() in bootstrap/app.php.
Così il middleware throttle viene mappato sulla classe ThrottleRequestsWithRedis e il conteggio avviene con precisione grazie alle operazioni atomiche di Redis.
Se usi throttleWithRedis(), assicurati che Redis sia sempre disponibile. In caso di errore di connessione a Redis, tutte le richieste potrebbero essere rifiutate.

Vantaggi di usare Redis

  • Compatibile con la scalabilità orizzontale — puoi condividere il contatore tra più istanze del server
  • Alta precisione — le operazioni atomiche prevengono race condition
  • Gestione del TTL — l’expiration nativo di Redis rimuove automaticamente i contatori

Pagine correlate

Cache

Rivedi configurazione e uso dei driver di cache di Laravel, Redis incluso.
Ultima modifica il 13 luglio 2026