İçeriğe geç

503 hatası ve proxy timeout: teşhis ve çözüm

Гайды
503 hatası ve proxy timeout: teşhis ve çözüm

503 Service Unavailable hatası, sunucunun bir isteği geçici olarak karşılayamadığını gösterir; genellikle bakım veya kaynak doygunluğu nedeniyle oluşur. Proxy timeout ise tipik olarak 504 Gateway Timeout biçiminde görülür ve aracı sunucu, upstream sunucudan zamanında yanıt alamadığında ortaya çıkar. Bu sorunları çözmek için darboğazın hedef sunucunun kapasitesinde mi, proxy yapılandırmasında mı, yoksa istemcinin istek sıklığında mı olduğunu sistematik biçimde belirlemek gerekir.

503 Service Unavailable hatasını anlamak

503 durum kodu, hedef web sunucusunun isteği şu anda işleyemediğini bildiren sunucu tarafı bir yanıttır. 404 (Not Found) veya 403 (Forbidden) hatalarının aksine 503 genellikle geçicidir. Yüksek hacimli veri toplama veya otomatik gezinme senaryolarında bu hataya çoğunlukla anti-bot mekanizmaları veya sunucu tarafı rate limiting yol açar.

Sunucu 503 döndürdüğünde yanıta Retry-After header'ını ekleyebilir. Bu header, istemciye isteği tekrarlamadan önce ne kadar bekleyeceğini söyler. Bu header'ı yok sayıp hemen yeniden denemek genelde kalıcı IP yasağına yol açar. GProxy kullanan geliştiriciler için 503 almak çoğunlukla hedef sitenin trafik desenini insan dışı olarak işaretlediği ya da hedef sitenin ilgili backend node'unun aşırı yüklendiği anlamına gelir.

503 hatalarının yaygın nedenleri

  • Sunucu aşırı yükü: hedef sunucu eşzamanlı bağlantı sınırına ulaşmıştır.
  • Bakım pencereleri: sitede planlı güncelleme yapılmaktadır.
  • Agresif rate limiting: sunucu tek bir IP'den veya proxy havuzundan gelen aşırı isteği algılar ve erişimi geçici olarak kısar.
  • Backend çökmesi: load balancer arkasındaki bir uygulama sunucusu (Gunicorn veya PHP-FPM gibi) çökmüştür ama load balancer hâlâ ayaktadır.
503 hatası ve proxy timeout: teşhis ve çözüm

Proxy timeout (504 Gateway Timeout) nedir

Proxy timeout zincirin daha yukarısında oluşur. Bir proxy üzerinden istek gönderdiğinizde proxy aracı rolü üstlenir: isteğinizi hedef sunucuya iletir ve bekler. Hedef sunucu yanıt vermekte çok gecikirse proxy sunucusu bağlantıyı sonlandırır ve 504 Gateway Timeout hatası döndürür.

Bu ayrım kritiktir: 503 sitenin kendisinden, 504 ise proxy'den (veya bir load balancer'dan) gelir. GProxy kullanıyorsanız ve 504 görüyorsanız, bu GProxy altyapısının isteğinizi başarıyla aldığı ama hedef sitenin veriyi ayrılan timeout süresi içinde verecek kadar hızlı olmadığı anlamına gelir.

Üç timeout katmanı

  1. Connection timeout: proxy veya hedef sunucuyla ilk TCP handshake'in kurulması için geçen süre. Genellikle 5–10 saniye olarak ayarlanır.
  2. Read timeout: bağlantı kurulduktan sonra proxy'nin, hedef sunucunun ilk veri baytını göndermesini beklediği süre.
  3. Total request timeout: isteğin başlamasından son baytın alınmasına kadar tüm işlem için izin verilen en uzun süre.

Karşılaştırma: 503 Service Unavailable ile 504 Gateway Timeout

Bu iki hatayı ayırt etmek, etkili teşhisin ilk adımıdır. Aşağıdaki tablo, kaynak ve çözüm stratejisi açısından temel farkları gösterir.

Özellik 503 Service Unavailable 504 Gateway Timeout
Kaynak Hedef web sunucusu Proxy sunucusu veya load balancer
Anlamı Sunucu aşırı yüklü veya bakımda. Upstream sunucu yanıt vermekte çok gecikti.
Yaygın nedeni Rate limiting, yoğun trafik, backend arızası. Yavaş veritabanı sorguları, ağ gecikmesi, proxy limitleri.
İstemcinin yapacağı Retry-After süresini bekleyin veya IP'leri rotasyona sokun. Timeout ayarlarını artırın veya isteği optimize edin.
GProxy'nin rolü Rate limitleri aşmak için yeni IP sağlar. Gecikmeyi en aza indiren yüksek hızlı yönlendirme sunar.

Teşhis çerçevesi: darboğazı yalıtmak

Bu hataları düzeltmek için arızanın nerede oluştuğunu belirlemeniz gerekir. Sorunu tespit etmek için aşağıdaki teşhis adımlarını uygulayın.

Adım 1: cURL ile ayrıntılı log

Bir proxy sorununu teşhis etmenin en basit yolu, curl komutunu -v (verbose) bayrağıyla kullanmaktır. Böylece proxy'nin ve hedef sunucunun döndürdüğü header'ları görebilirsiniz.

curl -v -x http://your-proxy-address:port --proxy-user user:pass https://target-website.com

Yanıttaki Server header'ına bakın. Header "nginx" veya "Cloudflare" diyorsa ve 504 dönüyorsa, timeout tam olarak o hop'ta yaşanıyordur. Yanıt GProxy'ye özgü header'lar ve 503 içeriyorsa, isteği reddeden hedef sitedir.

Adım 2: proxy olmadan test

Mümkünse isteği yerel bir IP'den (veya farklı bir ağdan) deneyin. 503 devam ediyorsa sorun kesinlikle hedef sunucudadır. 503 kayboluyorsa, hedef sunucu büyük olasılıkla proxy IP aralığını veya proxy'nin belirli davranışını (eksik header'lar gibi) işaretlemiştir.

Adım 3: yanıt gecikmesini analiz etmek

İsteklerinizin süresini ölçün. Her 504 hatası tam olarak 30. veya 60. saniyede oluşuyorsa, proxy istemcinizde ya da proxy sunucusunda tanımlı sabit bir timeout sınırına çarpıyorsunuz demektir. GProxy yüksek performanslı throughput sağlar, ancak hedef site yavaşsa istemci tarafı ayarlarınızı düzenlemeniz gerekebilir.

503 hatası ve proxy timeout: teşhis ve çözüm

503 ve timeout sorunları için teknik çözümler

Teşhis tamamlandıktan sonra hata türüne göre şu çözümleri uygulayın. Bu stratejiler hem sunucu tarafı yapılandırmayı hem de istemci tarafı istek mantığını kapsar.

503 hatalarını düzeltmek (hedef sunucu kaynaklı)

503 çoğunlukla rate limiting işareti olduğundan en etkili çözüm IP rotasyonudur. GProxy'nin residential proxy havuzunu kullanarak istekleri binlerce benzersiz IP'ye dağıtabilir, tek bir IP'nin hedefin eşiğine ulaşmasını önleyebilirsiniz.

  • Exponential backoff uygulayın: 503 algılandığında yeniden denemeden önce 1 saniye, sonra 2, sonra 4 saniye bekleyin. Bu, zorlanan bir sunucuyu "dövmeyi" engeller.
  • İstek header'larını rastgeleleştirin: User-Agent, Accept-Language ve Referer header'larınızın gerçek bir tarayıcı gibi görünmesini sağlayın. Eksik veya sabit header'lar çoğu zaman 503 savunmalarını tetikler.
  • Eşzamanlılığı azaltın: 100 thread çalıştırıyorsanız 20'ye düşürün. Yüksek eşzamanlılık, sunucu tarafı 503'lerin başlıca tetikleyicisidir.

Proxy timeout'larını düzeltmek (504 hataları)

Timeout alıyorsanız amaç, isteğe daha fazla süre tanımak veya isteği "hafifletmek"tir.

  • İstemci timeout'unu artırın: Python'un requests kütüphanesinde varsayılan timeout çoğu zaman çok kısadır veya hiç ayarlanmamıştır. Değeri açıkça yükseltin.
  • Keep-Alive header'ları kullanın: kalıcı bağlantı sürdürmek tekrarlanan TCP handshake yükünü azaltır ve timeout olasılığını düşürür.
  • Hedef URL'yi optimize edin: görsel ve script dolu ağır bir sayfa yerine JSON API endpoint'ini isteyin ya da kaynak engelleme açık bir headless tarayıcı kullanın.

Kod düzeyinde dayanıklılık: Python uygulaması

Modern otomasyon sağlam hata yönetimi gerektirir. urllib3 veya tenacity gibi kütüphaneler 503'leri ve timeout'ları düzgün biçimde ele almanızı sağlar. Aşağıda, GProxy ile retry mantığı kullanan üretim düzeyinde bir istek fonksiyonu örneği yer alıyor.

import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry

def fetch_with_retry(url, proxy_url):
    session = requests.Session()

    # Retry stratejisini tanimla
    # 503 ve 504 status_forcelist icinde yer aliyor
    retry_strategy = Retry(
        total=5,
        backoff_factor=2, # 2sn, 4sn, 8sn bekler...
        status_forcelist=[502, 503, 504],
        allowed_methods=["HEAD", "GET", "OPTIONS"]
    )

    adapter = HTTPAdapter(max_retries=retry_strategy)
    session.mount("https://", adapter)
    session.mount("http://", adapter)

    proxies = {
        "http": proxy_url,
        "https": proxy_url
    }

    try:
        # (connect, read) icin ozel timeout ayarla
        response = session.get(url, proxies=proxies, timeout=(5, 30))
        response.raise_for_status()
        return response.text
    except requests.exceptions.HTTPError as e:
        print(f"HTTP Error: {e}")
    except requests.exceptions.Timeout:
        print("The request timed out.")
    except requests.exceptions.RequestException as e:
        print(f"An error occurred: {e}")

# GProxy kimlik bilgileriyle ornek kullanim
proxy = "http://username:password@gproxy-endpoint:port"
content = fetch_with_retry("https://example.com/data", proxy)

Kurumsal yükler için GProxy performansını optimize etme

Kurumsal ölçekte scraping'de standart retry mantığı çoğu zaman yetersiz kalır. GProxy kullanırken 503'leri ve timeout'ları azaltmak için şu mimari düzenlemeleri değerlendirin:

1. Oturum yönetimi mi, yeni IP mi

GProxy hem "Sticky Session" hem de "Rotating IP" sunar. 503 alıyorsanız sticky oturumunuz işaretlenmiş olabilir. Sunucunun takibini sıfırlamak için her istekte rotating IP'ye geçin. Buna karşılık 504 alıyorsanız, proxy node'una kurulmuş bağlantıyı yeniden kullandığı için sticky oturum daha hızlı olabilir.

2. Geo-targeting

Gecikme, 504 timeout'larının başlıca nedenlerindendir. Hedef sunucunuz Almanya'daysa, GProxy'nin geo-targeting özelliğiyle Almanya'daki proxy'leri seçin. Bu, verinin kat ettiği fiziksel mesafeyi kısaltır, "Time to First Byte" (TTFB) değerini düşürür ve proxy'nin timeout'a düşmesini önler.

3. Throughput izleme

Başarı oranınızı izleyin. 503 hatalarındaki ani artış genellikle hedef sitenin WAF (Web Application Firewall) ayarlarının değiştiğini gösterir. Böyle durumlarda istekler arasındaki gecikmeyi artırmak ve User-Agent'ları daha agresif biçimde rotasyona sokmak gerekir.

Önemli çıkarımlar

503 ve 504 hatalarıyla uğraşmak, proxy altyapısı yönetiminin olağan parçasıdır. 503'ün sunucu tarafından gelen bir "uzak dur", 504'ün ise proxy tarafından gelen bir "beklemekten yoruldum" olduğunu kavradığınızda, stack'in yanlış katmanında zaman kaybetmeden doğru çözümü uygulayabilirsiniz.

  • Kaynağı belirleyin: hatanın hedef siteden (503) mi yoksa proxy'den (504) mi geldiğini görmek için curl -v kullanın.
  • Akıllı retry kurun: asla hemen yeniden denemeyin. Exponential backoff uygulayın ve Retry-After header'ına uyun.
  • GProxy havuzundan yararlanın: 503 üreten rate limiting'e karşı residential IP'leri rotasyona sokun ve 504'e yol açan gecikmeyi azaltmak için geo-targeting kullanın.

Pratik ipucu 1: kodunuzda her zaman açık bir timeout tanımlayın (örneğin timeout=30). Varsayılan sistem timeout'larına güvenmek çoğu zaman bellek ve CPU tüketen askıda kalmış süreçlere yol açar.

Pratik ipucu 2: belirli bir alan adında sürekli 503 alıyorsanız, Accept-Encoding: gzip, deflate header'ının eksik olup olmadığını kontrol edin. Bazı sunucular yüksek yük altında sıkıştırılmamış istekleri işlemekte zorlanır ve yapay 503 yanıtları döndürür.

support_agent
GProxy Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.