Sonsuz yönlendirme döngüsü (redirect loop) oluştu; neden?
Kısa cevap
En sık neden, TLS'in TR7'de sonlandırılması ve isteğin Kurum Servisine şifresiz gitmesidir: uygulama isteği HTTP sanıp HTTPS'e yönlendirir, tarayıcı HTTPS ile döner ve döngü tekrarlanır. TR7 bu bilgiyi kendiliğinden iletmez; X-Forwarded-Proto başlığı Set HTTP Header aksiyonuyla eklenip uygulama bu başlığa güvenecek şekilde ayarlanmalı ya da yönlendirme yalnızca TR7'de yapılmalıdır. Diğer nedenler koşulsuz eklenmiş bir Redirect to HTTPS aksiyonu, TR7'ye HTTP ile bağlanan bir CDN ya da proxy ve TR7 ile uygulamanın zıt yönde (www ile www'suz, https ile http) yönlendirmesidir. Zincirdeki her yönlendirmenin TR7'den mi uygulamadan mı geldiği HTTP Logs'taki Backend Service değerinden anlaşılır.
Olası Nedenler
| Neden | Zincir | Çözüm |
|---|---|---|
| TLS TR7'de sonlanıyor, uygulama kendisi HTTPS'e yönlendiriyor | https://x → https://x (aynı adres); Backend service = sunucu adı | X-Forwarded-Proto eklenir ve uygulama buna güvenecek şekilde ayarlanır (HTTPS'e geçtikten sonra sayfalarda "mixed content" uyarısı çıkıyor; nasıl çözerim?); ya da uygulamadaki HTTPS zorlaması kapatılıp yönlendirme TR7'ye bırakılır; ya da Kurum Servisinde SSL Service açılarak TR7'nin sunucuya TLS ile bağlanması sağlanır (SSL Service seçeneği ne yapar; backend'e şifreli bağlanmak için ne gerekir?) |
| Redirect to HTTPS koşulsuz eklenmiş | https://x → https://x; Backend service = TR7 | Aksiyona If SSL is NOT terminated koşulu eklenir (HTTP → HTTPS frontend protokol seçeneği ile Redirect to HTTPS action'ı arasındaki fark nedir?) |
Uygulama http:// Location üretiyor, TR7 HTTP'yi HTTPS'e yönlendiriyor | https → http → https | Location yeniden yazılır ya da X-Forwarded-Proto eklenir (Backend uygulaması mutlak URL'lerde http:// üretiyor; nasıl düzeltirim?) |
| CDN ya da proxy TR7'ye HTTP ile bağlanıyor | Tarayıcı HTTPS kullanıyor; HTTP Logs'ta TLS Version = Plain HTTP ve durum 301 | CDN'in TR7'ye HTTPS ile bağlanması sağlanır |
| TR7 ve uygulama zıt yönde host yönlendiriyor | example.com → www.example.com → example.com | Kanonik ad tek yerde tanımlanır (www ekleme / kaldırma yönlendirmesini nasıl yaparım?) |
| Giriş sayfasına dönüp duruyor | Login sayfasına geri yönlendirme | Uygulamam kullanıcıyı sürekli login ekranına atıyor (oturum kayboluyor); neden? |
Kesin kurallar:
- vService frontend satırındaki Protocol = HTTP → HTTPS seçeneği yalnızca o IP ve porta şifresiz gelen istekleri 301 ile yönlendirir; HTTPS istekleri yönlendirmediği için tek başına döngü üretmez.
- Redirect to HTTPS aksiyonu koşul eklenmezse bütün isteklere, HTTPS isteklerine de uygulanır; döngü koruması kendiliğinden yoktur.
- Location Redirection aksiyonu koşulsuz eklenirse hiç çalışmaz (Location Redirection veya User Authentication (On HTTP request) action'ını koşulsuz eklersem neden çalışmıyor?).
Nereden İzlenir?
| Ekran | Yol | Ne gösterir |
|---|---|---|
| HTTP Logs | Load Balancer vServices → vService → Logs & Tracking | 3xx kayıtları, Backend service (TR7 ya da sunucu adı), Response source ve TLS version |
| Debug Mode Logs → Response | Aynı sekmede (vService Debug Mode'dayken) | Yanıttaki Location başlığının değeri |
| Load Balancer Management | vService → Load Balancer Management | vService'teki aksiyonlar ve koşulları tek ekranda |
Nasıl Teşhis Edilir?
- Zincir çıkarılır: istemciden
curl -sIL --max-redirs 10 https://www.example.com/çalıştırılır; her adımın durum kodu ve Location değeri görülür. - Yönlendirmeyi kimin ürettiği bulunur: Left Monitor Panel → Load Balancer vServices → vService → Logs & Tracking → HTTP Logs açılır; Filter panelinde Status Class kartından
3xxseçilir ve Backend Service kartına bakılır (Filter). TR7 ise yönlendirmeyi TR7, sunucu adıysa uygulama üretmiştir. Kolon seçiciden TLS Version eklenirse isteğin TR7'ye şifresiz (Plain HTTP) gelip gelmediği de görülür. - TR7 üretiyorsa: vService'teki Redirect to HTTPS ve Location Redirection aksiyonlarının koşulları ile aynı port için frontend HTTP → HTTPS seçeneği kontrol edilir.
- Uygulama üretiyorsa: HTTP vService'in Status alanı Debug Mode yapılır; Debug Mode Logs'ta kaydın Response sekmesindeki Location başlığına bakılır ve uygulamanın HTTPS zorlama ve kanonik ad ayarları incelenir. İnceleme bitince Status yeniden Enabled yapılır.
- Düzeltmeden sonra 1. adım tekrarlanır. Tarayıcı 301'i önbelleğe aldığı için test curl ya da gizli pencereyle yapılır.
Sık Karıştırılan Noktalar
- "TR7 uygulamaya isteğin HTTPS olduğunu bildirir." Bildirmez; X-Forwarded-Proto başlığı Set HTTP Header aksiyonuyla (Execution Level = On Request, Header to edit =
X-Forwarded-Proto, Header content =https, koşul If SSL is terminated) eklenir. - "Hem frontend HTTP → HTTPS hem Redirect to HTTPS kullanmak daha güvenlidir." İki ayrı yönlendirme tanımı oluşur; biri yeterlidir.
- "X-Forwarded-Proto eklemek tek başına yeterlidir." Uygulamanın da bu başlığa güvenecek şekilde ayarlanması gerekir; bu ayar uygulama tarafındadır.
- "Düzeltme işe yaramadı." Tarayıcı önceki 301'i önbellekten uygular; test gizli pencereyle ya da curl ile tekrarlanır.
Dokümantasyonda nasıl yapılır
