502 Bad Gateway alıyorum; olası nedenler nelerdir?
Kısa cevap
TR7'nin ürettiği 502, Kurum Servisinden geçerli bir yanıt alınamadığını gösterir: sunucu yanıt başlıklarını göndermeden bağlantıyı kapatmış ya da çökmüş, yanıt HTTP kurallarına aykırı olmuş, yanıt başlıkları Buffer Size(kB) değerine sığmamış ya da bağlantı sunucu tarafından reddedilmiştir. Tipik nedenler uygulamanın çökmesi ya da bağlantıyı erken kapatması, geçersiz ya da çok büyük yanıt başlıkları ve TR7 ile sunucu arasındaki SSL Service ya da Proxy uyuşmazlıklarıdır. Hangi Kurum Servisinin ve hangi aşamanın sorumlu olduğu HTTP Logs'taki Backend Service değerinden ve Debug Mode Logs'taki Termination State'ten okunur; uygulamanın kendi 502'si Termination state'te Normal görünür.
Olası Nedenler
| Neden | Termination state | Nasıl doğrulanır | Çözüm |
|---|---|---|---|
| Uygulama isteği işlerken çöküyor ya da bağlantıyı erken kapatıyor | During response headers · Server aborted/refused | Sunucu logları; hatalar tek sunucuda ya da tek yolda yoğun | Uygulama düzeltilir; health check uygulamanın asıl işlevini denetleyecek biçimde derinleştirilir (TCP port kontrolü ile HTTP kontrolü arasındaki fark nedir; hangisini seçmeliyim?) |
| Geçersiz yanıt başlığı (ör. başlık adında izin verilmeyen karakter) | During response headers · TR7 intercepted | Sunucuya doğrudan curl -sv ile ham yanıt incelenir | Uygulamanın yanıtı düzeltilir |
| Yanıt başlıkları Buffer size(kB) değerine sığmıyor (ör. büyük Set-Cookie) | During response headers · TR7 intercepted | Doğrudan yanıttaki başlıkların toplam boyutu | Buffer Size(kB) artırılır (Buffer size ne işe yarar; ne zaman değiştirmeliyim?) |
| Sunucu ya da aradaki bir cihaz bağlantıyı reddediyor | While connecting to backend · Server aborted/refused; Retries sıfırdan büyük | Sunucu servisi ve portu; istemci 502 ya da 503 görebilir | Sunucu servisi ve portu düzeltilir (Kullanıcılar "503 Service Unavailable" / "No Available Server" görüyor; ne yapmalıyım?) |
| SSL service ya da Certificate verification sunucuyla uyuşmuyor | TLS bağlantısı kurulamaz: While connecting to backend · Server aborted/refused | Sunucunun HTTPS mi HTTP mi dinlediği; sertifikası | SSL Service ve Certificate Verification sunucuya göre ayarlanır (SSL Service seçeneği ne yapar; backend'e şifreli bağlanmak için ne gerekir?, Backend'e HTTPS ile bağlanırken backend sertifikasını doğrulayabilir miyim?) |
| Proxy protocol uyuşmazlığı | During response headers · Server aborted/refused | Sunucunun PROXY başlığı bekleyip beklemediği | Proxy ayarı sunucuya göre düzeltilir (Proxy Protocol ayarı nedir, ne zaman açılmalıdır?) |
| Uygulamanın ya da arkasındaki başka bir proxy'nin kendi 502'si | Normal; Backend service = sunucunun adı | Doğrudan istekte de 502 döner | Arka taraf düzeltilir |
Nereden İzlenir?
| Ekran | Yol | Ne gösterir |
|---|---|---|
| HTTP Logs | Load Balancer vServices → vService → Logs & Tracking | 502 alan istekler, Backend service ve Response source |
| Debug Mode Logs | Aynı sekmede (vService Debug mode'dayken) | Termination state, Retries, yanıt başlıkları (Response sekmesi) |
| Live Stats → Backend Services | vService → Live Stats | Kurum Servisi başına bağlantı hataları; ipucunda Connect ve Response ayrı |
| Backend Response Code Distribution | vService → Dashboard | Kurum Servisi başına yanıt kodu sınıfları |
Nasıl Teşhis Edilir?
- Sayfa kimin? TR7'nin 502 sayfasında büyük "502" ve "Invalid Response" yazar. vService'e Show Content for Traffic Manager Errors ya da Show Content for Backend Service Errors aksiyonu eklenmişse görünen sayfa özel içeriktir; kaynak loglardan belirlenir (TR7'nin kendi ürettiği 503/502/504 hataları için özel sayfa gösterebilir miyim?).
- HTTP logs: Left Monitor Panel → Load Balancer vServices → vService → Logs & Tracking → HTTP Logs açılır; Filter panelinde Status Code kartından
502seçilir. Backend Service değeri hep aynı sunucuyu mu gösteriyor, 502'ler belirli bir yolda ya da istek tipinde mi toplanıyor, bakılır (HTTP logs filtreleri). Kayıt yoksa vService'te Log Profile açık değildir. - Debug mode logs: vService'in düzenleme formunda Status = Debug Mode seçilir ve kaydedilir; hata yeniden üretilir, kaydın Termination State değeri yukarıdaki tabloyla eşleştirilir (Bir isteğin neden başarısız olduğunu loglardan nasıl anlarım (termination state)?). İnceleme bitince Status yeniden Enabled yapılır.
- Doğrudan yanıt: Aynı istek sunucuya doğrudan ya da WEB-CLI'dan, Kurum Servisinin route table'ı seçilerek gönderilip ham yanıt incelenir; cihazın kendisi için
v-devicealanınaHostyazılır, route table adı Tab listesinden alınır (Backend'e doğrudan erişince çalışıyor, TR7 üzerinden çalışmıyor; neden?):bashsys-cmd route-table set v-device Host route-table <route-table> sys-cmd curl -sv --resolve www.example.com:443:192.0.2.21 https://www.example.com/ - Kurum Servisi ayarları: Load Balancer → Backend Services → Edit ekranında SSL service, Certificate verification ve Proxy, sunucunun beklediğiyle karşılaştırılır.
Sık Karıştırılan Noktalar
- "502 sunucunun kapalı olduğunu gösterir." Sunucuya hiç bağlanılamaması da 502 üretebilir, ancak kapalı sunucunun en sık sonucu 503'tür; 502'yi çoğunlukla sunucunun geçersiz ya da yarım yanıtı üretir.
- "Buffer size(kB) değerini büyütmek her 502'yi çözer." Yalnızca büyük yanıt başlıklarında işe yarar; bellek kullanımını artırır ve değişiklik vService'i yeniden başlatır.
- "Her 502'yi TR7 üretir." Uygulamanın arkasındaki başka bir proxy de 502 döndürebilir; bu durumda Termination state
Normalgörünür ve Backend service değerinde sunucunun adı yazar. - "Termination state HTTP logs'ta da vardır." Bu kolon yalnızca Debug Mode Logs'ta bulunur.
Dokümantasyonda nasıl yapılır
