Next.js Uygulamasında Rate Limiter Kullanımı
Rate Limiter, günlük hayatta kullandığımız sistemlerin, uygulamaların olmazsa olmaz kurallarından biridir. Ne anlama geldiğini şöyle açıklayabiliriz; Bir sistemin belirli bir süre içinde kabul edeceği istek sayısını sınırlayan bir mekanizmadır. Dolayısı ile kullanım amaçları da şu şekilde olur; Aşırı trafik, kötüye kullanım, brute-force saldırıları, bot istekleri ve sunucu yüklenmesini önlemek.
Bu makalemde sizlere Next.js tarafında kullanılabilen rate limiter paketlerinden biri olan "rate-limiter-flexible" ı anlatmaya çalışacağım.
Nedir bu rate-limiter-flexible?
DoS saldırılarına, brute-force denemelerine ve aşırı istek yüküne karşı koruma sağlayan esnek bir rate limiting kütüphanesidir. Redis, MongoDB, MySQL, PostgreSQL, Memcached gibi birçok depolama sistemiyle çalışabilir.
Özellikleri Nelerdir?
- Çoklu depolama desteği,
- IP bazlı ve ya kullanıcı bazlı yapılandırma,
- Yüksek performans
Next.js Ortamında Kullanımı
1. Kurulum
npm install rate-limiter-flexible
2. IP Bazlı Rate Limiter
// app/api/login/route.ts
import { NextResponse } from 'next/server';
import { RateLimiterMemory } from 'rate-limiter-flexible';
const rateLimiter = new RateLimiterMemory({
points: 10, // 10 deneme hakkı
duration: 300, // 5 dakika
});
export async function POST(req: Request) {
const ip = req.headers.get('x-forwarded-for') || 'unknown';
try {
await rateLimiter.consume(ip);
return NextResponse.json({ success: true });
} catch {
return NextResponse.json({ error: 'Çok fazla deneme yaptınız!' }, { status: 429 });
}
}
Dikkat Edilmesi Gerekenler
Sunucu tarafında çalıştırın. Rate limiting mantığını client tarafına taşımayın.
Doğru depolama seçin. Küçük projeler için memory yeterli olabilir, büyük ölçekli projelerde Redis/MongoDB tercih edin.
Yanıt kodlarını doğru kullanın. Limit aşıldığında 429 Too Many Requests döndürmek standarttır.
Sonuç
rate-limiter-flexible, Next.js App Router projelerinde esnek, performanslı ve güvenilir bir rate limiting çözümü sunar.
İster küçük bir blog API’si, ister büyük ölçekli bir SaaS uygulaması geliştirin, bu paket sayesinde kullanıcı isteklerini kontrol altına alabilir ve sisteminizi güvenceye alabilirsiniz.