429 “Aşırı Fazla İstek” Hatasını Nasıl Çözersiniz
429 “Çok Fazla İstek” Hatasını Nasıl Çözersiniz
HTTP 429 “Çok Fazla İstek” hatası, bir kullanıcının (veya istemcinin) belirli bir zaman diliminde izin verilen istek sayısını aştığında bir sunucu tarafından gönderilen bir oran sınırlama yanıt kodudur. Bu durum genellikle güvenlik, API koruma veya anti-DDoS mekanizmalarının bir parçasıdır.
Üretim ortamlarında, hizmetleri kesintiye uğratabilir, API entegrasyonlarını bozabilir veya SEO’yu etkileyebilir. Bu ileri düzey kılavuz, 429 hatasını tanımlama, önleme ve çözme yöntemlerini hem istemci tarafı hem de sunucu tarafı perspektiflerinden ele almaktadır.
429 Hatasına Neler Sebep Olur?
Yaygın senaryolar:
Bir kullanıcı/bot çok fazla HTTP isteği (API çağrıları, sayfa yüklemeleri vb.) gönderiyor
Uygulamanız, üçüncü taraf bir hizmeti çok agresif bir şekilde tarıyor veya sorguluyor
Web uygulama güvenlik duvarları (WAF’lar) veya ters proxy’ler (örn. Cloudflare, Nginx) oran limitlerini uygular
Sunucu veya arka uç API’leri oran sınırlama kütüphaneleri kullanır (örn. express-rate-limit, mod_evasive vb.)
Botlar veya tarayıcılar web sitesini veya uç noktayı doldurur
Adım 1: Kaynağı Belirleyin
✅ 1. Yanıt Başlıklarını Kontrol Edin
Sunucular genellikle 429 yanıtı ile birlikte bir Retry-After başlığı gönderir:
HTTP/1.1 429 Too Many Requests
Retry-After: 60Bu, istemciye tekrar denemeden önce ne kadar beklemesi gerektiğini (saniye cinsinden) bildirir.
✅ 2. Erişim Günlüklerini Kontrol Edin
Apache için:
cat /var/log/apache2/access.log | grep "429"Nginx için:
cat /var/log/nginx/access.log | grep "429"Bu, hangi IP’lerin veya uç noktaların limiti tetiklediğini belirlemeye yardımcı olur.
✅ 3. İzleme Araçlarını Kullanın
Fail2Ban günlükleri
Cloudflare Güvenlik Duvarı Olayları
Uygulama düzeyi günlükler (Laravel, Express, Django vb.)
Oran limit analitiği (bir API geçidi kullanıyorsanız)
Adım 2: Sunucu Tarafı Düzeltmeleri
A. Nginx Oran Sınırlama (aktifse)
Nginx şu şekilde yapılandırılabilir:
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=5r/s;location /api/ {limit_req zone=api_limit burst=10 nodelay;}Çözüm:
Oranı artırın veya patlama değerini artırın
Belirli yollar için (örn. /api/) uygulayın, genel olarak değil
Bilinen iç IP’leri beyaz listeye alın
B. Apache (mod_evasive veya mod_security)
Eğer mod_evasive aktifse:
sudo nano /etc/apache2/mods-enabled/evasive.confAyarları değiştirin:
DOSPageCount 10
DOSSiteCount 100
DOSBlockingPeriod 10➡️ Eşik değerlerini artırın veya belirli güvenilir IP’ler için devre dışı bırakın.
C. Cloudflare / CDN Kuralları
Eğer Cloudflare arkasındaysanız, kontrol edin:
Oran Sınırlama Kuralları Güvenlik > WAF
Bot Savaş Modu
Güvenlik Duvarı Kuralları User-Agent veya IP’ye göre engelleme
Çözüm:
Hassasiyeti azaltın
Sunucu IP’lerini veya belirli kullanıcı ajanlarını beyaz listeye alın
Güvenli tarayıcılar ve ortaklar için özel kurallar oluşturun
D. Uygulama Düzeyi Oran Sınırlama
Uygulamanızın şu kütüphaneleri kullanarak limitleri uygulayıp uygulamadığını kontrol edin:
Node.js: express-rate-limit
Laravel: ThrottleRequests
Django: drf-extensions veya middleware
Yapılandırmayı güncelleyin, örneğin:
rateLimit({
windowMs: 1 * 60 * 1000, // 1 minute
max: 100, // limit each IP to 100 requests per minute
})➡️ Limitleri ayarlayın, kullanıcı/IP beyaz listeleme ekleyin veya kimlik doğrulama token’larına dayalı kota artırın.
Adım 3: İstemci Tarafı Düzeltmeleri (API Tüketirken)
Eğer uygulamanız istemci ise ve 429 alıyorsanız:
✅ Üssel Geri Çekme Uygulayın
İstekleri artan gecikmelerle otomatik olarak yeniden deneyin:
const retryAfter = (attempt) => Math.pow(2, attempt) * 1000;✅ Retry-After Başlıklarına Saygı Gösterin
if (response.status === 429) {
const wait = response.headers['retry-after'] * 1000;
setTimeout(() => retryRequest(), wait);
}✅ İstemci İçin Oran Sınırlama Ekleyin
Sorgulama yapıyorsanız kendi isteklerinizi sınırlayın:
// Use lodash or custom throttling
_.throttle(() => fetchData(), 1000);Adım 4: SEO Dikkat Edilmesi Gerekenler
Arama motoru tarayıcılarına sunulan bir 429 durumu, sıralamanızı olumsuz etkileyebilir.
✅ Çözüm:
Bunun yerine Retry-After ile birlikte bir 503 (Hizmet Kullanılamıyor) sunun
Tarama hızını sınırlamak için robots.txt kullanın:
User-agent: *
Crawl-delay: 10Cloudflare’da: Botlar > Tarama Yönetimi kısmına gidin
Adım 5: Meşru Kullanıcıları Engellemeden Koruma
Sert 429 limitleri yerine:
Şüpheli etkinlikler için CAPTCHA’lar kullanın
Sert engelleme yerine ilerleyen gecikmeler uygulayın
Giriş yapmış kullanıcılar için IP tabanlı oran sınırlama yerine kullanıcı tabanlı oran sınırlama kullanın
Daha yüksek oran limitleri ile kimlik doğrulama erişimi sağlayın (örn. API anahtarları veya token’lar aracılığıyla)
Sonuç
429 Çok Fazla İstek hatası, yararlı ama bazen rahatsız edici bir araçtır. Nereden geldiğini anlamak – sunucu, CDN veya uygulama – bunu çözmenin anahtarıdır. Doğru yapılandırma, günlükleme ve istemci tarafında limitlere saygı gösterilmesi ile koruma ve kullanılabilirlik arasında bir denge kurabilirsiniz.


