429, bir sınıra çarpıldığı anlamına gelir. İşe yarar soru şudur: kimin sınırı — kendi web sunucunuz mu, öndeki bir vekil ya da dağıtım ağı mı, çağırdığınız bir API mi, yoksa uygulamanın kendisi mi? Her biri farklı bir çözüm ister ve yanıt başlıkları genelde hangisi olduğunu söyler.

Önce yanıtı okuyun

curl -sSI https://yourdomain.com/api/thing | grep -i -E 'retry-after|ratelimit|x-'

Retry-After ne kadar bekleyeceğinizi söyler. RateLimit başlıkları tavanı ve kalanı bildirir. Bu başlıkların hiçbirini taşımayan bir 429 ise genelde kendi sunucunuzdan ya da kendini açıklayacak biçimde yapılandırılmamış bir vekilden gelir.

Kendi Nginx'inizse

grep "limiting requests" /var/log/nginx/error.log | tail
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;

location /api/ {
    limit_req zone=api burst=20 nodelay;
    limit_req_status 429;
}
Bir dağıtım ağının ya da yük dengeleyicinin arkasında $binary_remote_addr VEKİLİ gösterir; böylece bütün ziyaretçiler tek bir kovayı paylaşır ve bir avuç kişi sınırı herkes adına tetikler. Önce gerçek istemci adresini ayarlayın — bkz. Cloudflare ve gerçek ziyaretçi IP'si.

Sınırlanan sizseniz

  • Retry-After'a uyun. Hemen yeniden denemek çoğu yasağı uzatır.
  • Rastgele sapma katarak üstel biçimde geri çekilin ki bir işçi filosu aynı anda yeniden denemesin.
  • Getirdiğinizi önbelleğe alın. Hız sınırlarının çoğuna, aynı soruyu tekrar tekrar sorarak çarpılır.
  • API destekliyorsa toplu isteyin — elli çağrı yerine elli kayıt için tek çağrı.
for i in 1 2 3 4 5; do
  curl -fsS "$URL" && break
  sleep $(( (2 ** i) + RANDOM % 3 ))
done

Bir oturum açma uç noktasıysa

O hâlde amacına uygun çalışıyordur. Bkz. Oturum açma uç noktasında hız sınırlama.