Laravel’de Rate Limiting: throttle ve 429 Yönetimi
Laravel rate limiting, belirli bir istemcinin veya kullanıcının belli sürede yapabileceği işlemleri sınırlar. HTTP istekleri için throttle middleware’i ve adlandırılmış limit tanımı kullanılır; uygulama içindeki başka eylemler için RateLimiter facade kullanılabilir. Varsayılan limitin her Laravel sürümünde “60 istek/dakika” olduğunu varsaymayın; projenizin sürümündeki route ve middleware ayarlarını okuyun.
Önce Hangi Ucu Koruyacağınızı Seçin
Giriş, lisans doğrulama, parola sıfırlama veya pahalı rapor üretme uçları farklı politikalara ihtiyaç duyar. Hedef yalnız yüksek trafik değil, maliyetli işlemi ve kötüye kullanım yüzeyini sınırlamaktır. İzin verilen kullanımın tepe hacmini ölçmeden rastgele düşük eşik seçmek gerçek kullanıcıları engelleyebilir.
Adlandırılmış Limit Tanımı
Laravel’in güncel yönlendirme belgesinde adlandırılmış limiter, AppServiceProvider içinde RateLimiter::for() ile tanımlanıp throttle:ad middleware’iyle route’a bağlanır. Projenizdeki Laravel sürümünün kurulum yerini doğrulayın.
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\RateLimiter;
RateLimiter::for('license-check', function (Request $request) {
$key = $request->user()?->getAuthIdentifier() ?: $request->ip();
return Limit::perMinute(30)->by('license-check:'.$key);
});
Route::post('/license/check', [LicenseController::class, 'check'])
->middleware('throttle:license-check');
30 sayısı yalnız örnektir; gerçek eşik ölçülerek belirlenir. Lisans verisini yalnız oturum kimliğine güvenerek döndürmeyin: yetkilendirme ayrıca yapılmalıdır. Ters proxy arkasında IP kullanılıyorsa güvenilir proxy ayarı doğru olmalıdır; aksi hâlde bütün kullanıcılar tek IP gibi görülebilir veya başlık sahteciliği riski doğabilir.
Redis Gerekli mi?
Laravel rate limiter, yapılandırılan önbellek sürücüsünü kullanır. Redis zorunlu değildir; ancak çoklu uygulama sunucusunda ortak ve atomik sayaçlar için uygun bir seçenek olabilir. Yerel dosya veya ayrı sunucu önbellekleri tutarsız sonuç verebilir. Projenin cache ve proxy topolojisini birlikte değerlendirin.
429 Yanıtını İstemci Nasıl İşlemeli?
Limit aşılınca 429 durum kodu ve uygun yanıtta Retry-After başlığı görülebilir. İstemci başlıktaki süreye uyup sınırlı yeniden denemelidir. Bütün istekleri anında yeniden gönderme, sınırı daha da zorlar. Kullanıcıya anlaşılır mesaj gösterin; hata günlüklerinde istemci kimliği ve eşiği kaydedin ama API anahtarını saklamayın.
Nasıl Test Edilir?
- Gerçek route üzerinde middleware’in yüklü olduğunu kontrol edin.
- Kimliği doğrulanmış iki ayrı kullanıcıyı ve aynı IP’deki iki kullanıcıyı deneyin.
- Eşik altında başarılı, eşik üstünde 429 döndüğünü doğrulayın.
- Süre dolduğunda isteğin yeniden kabul edildiğini kontrol edin.
- Birden fazla worker/sunucuda ortak sayaç davranışını test edin.
Rate limiting, yetkilendirme, bot koruması ve kapasite planının yerine geçmez. Kuralları üretim trafiğini taklit eden kontrollü ortamda test edin; yük testini canlı hizmette yetkisiz biçimde çalıştırmayın.
Sonuç: Doğru limiter, kullandığınız Laravel sürümüne, güvenilir kimlik anahtarına, ortak cache’e ve gerçek trafik ölçümüne dayanır. Sabit varsayılan sayı veya kurgulanmış vaka anlatımı yerine projenizin yapılandırmasını gösterin.




