Backend'e doğrudan erişince çalışıyor, TR7 üzerinden çalışmıyor; neden?
Kısa cevap
Doğrudan testte istek istemcinin ağından, kendi Host başlığı ve bağlantı biçimiyle gider; TR7 üzerinden ise Kurum Servisine TR7'nin route table'ından, SNAT Default'ta o route table'da sunucuya giden arayüzün sunucuyla (ya da gateway'le) aynı subnet'teki Interface IP'siyle ve Kurum Servisi ayarlarındaki port, SSL Service, SNI ve Proxy seçenekleriyle yeni bir bağlantı açılır. Fark bu noktalardan birindedir: sunucu ya da uygulama TR7'nin IP'sine izin vermiyor, health check sunucuyu down gösteriyor, TLS, port ya da Proxy ayarı sunucuyla uyuşmuyor veya bir aksiyon başlığı ya da yolu değiştiriyor. Önce TR7'nin verdiği yanıt kodu ile Debug Mode Logs'taki bağlantı zinciri ve başlık farkları okunur, ardından aynı istek WEB-CLI'dan Kurum Servisinin route table'ı seçilerek tekrarlanır.
Sorun: Aynı Uygulama İki Yoldan Farklı Davranıyor
Sunucuya doğrudan erişildiğinde uygulama çalışıyor, TR7 üzerinden erişildiğinde hata, yanlış sayfa ya da bağlantı sorunu oluşuyor. HTTP ve L7 TCP vService'te TR7 istemcinin bağlantısını sonlandırır ve Kurum Servisine kendi bağlantısını açar; bu yüzden iki yol arasında kaynak adres, ağ yolu, protokol ve başlıklar farklıdır. Farkın hangisinden kaynaklandığı bulunmalıdır.
Nedenler ve Çözümler
| Neden | Nasıl anlaşılır | Çözüm |
|---|---|---|
| Sunucu ya da uygulama TR7'nin adresine izin vermiyor | TR7'den sys-cmd curl başarısız; Debug Mode Logs'ta Retries sıfırdan büyük | TR7'nin SNAT ve health check kaynak adreslerine izin verilir (SNAT alanındaki "Default" ne anlama gelir; özel bir SNAT IP'si seçebilir miyim?, Sunucu firewall'unda health check için hangi IP'lere izin vermeliyim?) |
| Health check profili sunucuyla uyuşmuyor | Kurum Servisi kırmızı, 503 | Profil sunucuya göre düzeltilir (Sunucu çalışıyor ama TR7 onu down gösteriyor; neden?) |
| Yanlış route table | TR7'den sunucuya erişim yok | Kurum Servisinin Route Table alanı düzeltilir (Backend'lerim farklı ağlarda / farklı route table'larda olabilir mi?) |
| Port farkı | Connection info'da beklenmeyen port | Address portu ya da Use Frontend Port düzeltilir (Kurum Servisi portu frontend portundan farklı olabilir mi (443'e gelen isteği 8080'e göndermek)?) |
| SSL service, SNI ya da sertifika doğrulaması uyuşmuyor | Bağlantı kurulmuyor, yanlış sertifika ya da yanlış site | Ayarlar sunucunun gerçek protokolüne göre düzeltilir |
| Proxy protocol uyuşmuyor | Sunucu bağlantıyı kapatıyor ya da isteği reddediyor | Proxy yalnızca sunucu PROXY başlığı bekliyorsa açılır |
| Host başlığı ya da aksiyon farkı | Yanlış site ya da 404; Request sekmesinde değişen başlık | Aksiyon ya da Host düzeltilir (Action'ım neden tetiklenmiyor?) |
| Başlık adlarının yazımı | Eski uygulama başlığı tanımıyor | Backend'im header adlarının büyük/küçük harf yazımına duyarlı; TR7 bunları değiştiriyor mu (Keep Header Names / HTTP 1.0 Header Compatibility)? |
| Büyük başlık ya da çerez | TR7'den 400 ve "Invalid or too large request" sayfası | Buffer size ne işe yarar; ne zaman değiştirmeliyim? |
| Uygulama gerçek istemci IP'si ya da HTTPS bilgisi bekliyor | IP kısıtı, yönlendirme döngüsü | Backend'de gerçek istemci IP'sini nasıl görürüm? |
Nereden İzlenir?
| Ekran | Yol | Ne gösterir |
|---|---|---|
| Backend Services listesi | Load Balancer → Backend Services | Kurum Servisinin health durumu |
| Debug Mode Logs · Summary | vService → Logs & Tracking → Debug Mode Logs | Connection info zinciri, Termination state, Retries |
| Debug Mode Logs · Request | Aynı kayıt | TR7'nin eklediği, sildiği ve değiştirdiği başlıklar |
| Sunucunun erişim logu | Kurum Servisi tarafı | İsteğin TR7'nin adresinden gelip gelmediği |
Çözüm: Dört Yöntem
Yöntemler sırayla uygulanır: önce TR7'nin döndürdüğü yanıt okunur, sonra TR7'nin sunucuya ne gönderdiği görülür, ardından aynı istek TR7'den tekrarlanır ve Kurum Servisi ayarları karşılaştırılır.
| Durumunuz | Uygun yöntem |
|---|---|
| TR7'nin döndürdüğü koda göre yönlendirme | Yöntem 1: Yanıt kodu |
| TR7'nin sunucuya ne gönderdiği | Yöntem 2: Debug Mode Logs |
| Ağ yolunu TR7'den denemek | Yöntem 3: WEB-CLI ile TR7'den deneme |
| Kurum Servisi ayarları | Yöntem 4: Kurum Servisi ayarları |
Yöntem 1: Yanıt Koduna Göre Yönlendirme Önerilen
- Nasıl çalışır TR7'nin döndürdüğü yanıt, farkın hangi aşamada oluştuğunu gösterir.
- Nerede açılır İstemci · TR7 üzerinden istek
- Gereksinim Ek bir ayar gerekmez.
- vService tipi HTTP · L7 TCP
Adım adım yapılandırma
İstemciden TR7 üzerinden curl -sv https://www.example.com/ ile yanıt alınır ve koda göre ilerlenir:
| TR7'nin yanıtı | İlgili sayfa |
|---|---|
| 503 | Kullanıcılar "503 Service Unavailable" / "No Available Server" görüyor; ne yapmalıyım? |
| 502 | 502 Bad Gateway alıyorum; olası nedenler nelerdir? |
| 504 | 504 Gateway Timeout alıyorum; hangi timeout'u kontrol etmeliyim? |
| 403, 418 ya da CAPTCHA sayfası | Meşru kullanıcılar engelleniyor; hangi kuralın engellediğini nasıl bulurum? |
| Yönlendirme döngüsü | Sonsuz yönlendirme döngüsü (redirect loop) oluştu; neden? |
| Oturum düşüyor | Uygulamam kullanıcıyı sürekli login ekranına atıyor (oturum kayboluyor); neden? |
Sayfada http:// bağlantılar | Backend uygulaması mutlak URL'lerde http:// üretiyor; nasıl düzeltirim? |
| Bağlantı hiç kurulmuyor | vService'e hiç erişilemiyor; adım adım neyi kontrol etmeliyim? |
Load Balancer → Backend Services listesinde Kurum Servisinin health göstergesine bakılır (Health durumu göstergesi). Kırmızıysa doğrudan erişim çalışırken down görünmesinin en sık nedeni health check profilinin sunucuyla uyuşmamasıdır (Sunucu çalışıyor ama TR7 onu down gösteriyor; neden?).
Doğrulama
curl -sv çıktısındaki durum satırına bakılır.
< HTTP/1.1 503 / 502 / 504 … (ilgili sayfaya geçilir)Yöntem 2: Debug Mode Logs
- Nasıl çalışır Debug kaydı TR7'nin isteği hangi Kurum Servisi adresine ilettiğini ve hangi başlıkları eklediğini, sildiğini ya da değiştirdiğini gösterir.
- Nerede açılır vService düzenleme formu → Status = Debug mode; kayıtlar Logs & Tracking → Debug mode logs
- Gereksinim HTTP vService; yoğun trafikte Debug grubundaki Select Conditions alanından seçilen bir koşulla yalnızca sorunlu istemci kaydedilir.
- vService tipi HTTP
Adım adım yapılandırma
Load Balancer → Load Balancer vService List ekranında vService seçilir ve Edit butonuna tıklanır.
Status alanında Debug Mode seçilir (aynı ayar Details panelindeki Debug kutusudur). Yoğun trafikte Debug grubundaki Select conditions alanından sorunlu istemciyi seçen koşul seçilir (Debug Mode ne kaydeder; ne kadar süre açık tutmalıyım?).
Save butonuna tıklanır ve sorun TR7 üzerinden yeniden üretilir.
Logs & Tracking → Debug Mode Logs ekranında ilgili kayıt açılır. Summary sekmesindeki Connection info zinciri (CLIENT IP→TR7 vService IP→Backend Service IP:Port) isteğin hangi IP ve porta gittiğini gösterir; zincir TR7'de bitiyorsa sunucuya hiç ulaşılmamıştır. Termination state ve Retries değerleri de okunur (Bir isteğin neden başarısız olduğunu loglardan nasıl anlarım (termination state)?).
Aynı kaydın Request sekmesinde TR7'nin eklediği, sildiği ve değiştirdiği başlıklar ayrı simgelerle gösterilir; Host başlığı ve yol aksiyonlarının etkisi burada görülür. Doğrudan test IP ile yapıldıysa sunucu, TR7'nin ilettiği Host başlığı için farklı bir sanal site sunuyor olabilir.
İnceleme bitince Load Balancer → Load Balancer vService List ekranında vService seçilir ve Edit butonuna tıklanır.
Status alanında Enabled seçilir. Debug mode kendiliğinden kapanmaz.
Save butonuna tıklanır.
Doğrulama
Düzeltme sonrasında aynı istek için Debug kaydı açılır.
Connection info sunucuya uzanır, Termination state Normal, Retries 0Yöntem 3: WEB-CLI ile TR7'den Deneme
- Nasıl çalışır Aynı istek TR7'nin route table'ından gönderilince ağ yolu ile istek içeriği birbirinden ayrılır.
- Nerede açılır WEB-CLI → sys-cmd route-table set · sys-cmd curl
- GereksinimUser Type = Admin olan kullanıcı (
sys-cmdaraçları yalnızca bu kullanıcı tipinde çalışır). - vService tipi HTTP · L7 TCP
Adım adım yapılandırma
WEB-CLI'da araçların çalışacağı route table, Kurum Servisinin Route Table alanındaki değerle seçilir; cihazın kendisi için v-device alanına Host yazılır, route table adı Tab listesinden alınır:
sys-cmd route-table set v-device Host route-table <route-table>Geçerli seçim sys-cmd route-table show ile görülür.
İstek, Host ve SNI doğru gidecek biçimde gönderilir; --resolve alan adını sunucu IP'sine yönlendirir (curl · Bilinmesi gerekenler):
sys-cmd curl -sv --resolve www.example.com:443:192.0.2.21 https://www.example.com/Sunucu düz HTTP dinliyorsa Host başlığı ayrıca verilir: sys-cmd curl -sv -H "Host: www.example.com" http://192.0.2.21:8080/.
TR7'den de çalışıyorsa ağ yolu sağlamdır ve fark istek içeriğindedir (Yöntem 2 ve 4). Çalışmıyorsa sunucunun güvenlik duvarı ya da route table'daki rota incelenir. Sunucunun erişim logunda TR7'nin adresinin göründüğü ve uygulamanın ya da sunucu güvenlik duvarının bu adrese izin verdiği kontrol edilir (Backend sunucularım neden tüm istekleri TR7'nin IP'sinden geliyormuş gibi görüyor?).
Doğrulama
sys-cmd curl çıktısındaki durum satırına bakılır.
< HTTP/1.1 200 OKYöntem 4: Kurum Servisi Ayarları
- Nasıl çalışır Port, TLS, SNI, Proxy ve route table ayarları sunucunun beklediğiyle aynı olmalıdır.
- Nerede açılırLoad Balancer → Backend Services → Edit
- Gereksinim Ek bir ayar gerekmez.
- vService tipi HTTP · L7 TCP
Adım adım yapılandırma
Load Balancer → Backend Services ekranında Kurum Servisi seçilir ve Edit butonuna tıklanır.
Address portu sunucunun dinlediği portla aynı olmalıdır; Use Frontend Port açıksa Address'teki port yok sayılır ve vService'e gelen isteğin portu kullanılır ("Use Frontend Port" seçeneği ne işe yarar?). Route Table sunucuya ulaşılan route table olmalıdır.
Sunucu HTTPS dinliyorsa SSL Service açık, düz HTTP dinliyorsa kapalı olmalıdır (SSL Service seçeneği ne yapar; backend'e şifreli bağlanmak için ne gerekir?). Sunucu SNI bekliyorsa SNI girilir (Backend'e bağlanırken SNI göndermem gerekiyor; nasıl ayarlarım?); Certificate Verification Required ise seçili CA profilinin sunucunun sertifikasını imzalayan CA'yı içerdiği kontrol edilir (Backend'e HTTPS ile bağlanırken backend sertifikasını doğrulayabilir miyim?).
Proxy yalnızca sunucu PROXY protocol başlığı bekliyorsa seçilir; beklemeyen sunucu bu başlığı geçersiz istek sayar (Proxy Protocol ayarı nedir, ne zaman açılmalıdır?).
Edit butonuna tıklanır. Kurum Servisini kullanan bütün vService'ler yeni ayarla çalışır; etkilenenler önizlemedeki Used in sekmesinde görülür.
Doğrulama
TR7 üzerinden istek tekrarlanır: curl -sv https://www.example.com/
Doğrudan erişimle aynı yanıtSık Yapılan Hatalar
- Doğrudan testi TR7'nin adresi dışında bir kaynaktan yapıp ağ sorunu olmadığına karar vermek. Sunucu yalnızca TR7'nin adresini reddediyor olabilir; test TR7'den
sys-cmd curlile tekrarlanır. - Testi IP ile yapıp Host ve SNI farkını gözden kaçırmak. Sunucu farklı sanal siteyi sunuyor olabilir.
- Health check ile veri trafiğinin kaynak adresinin aynı olduğunu varsaymak. İkisi Kurum Servisinde ayrı ayarlanır (SNAT ve Health Check Source IP).
- WEB-CLI'da route table seçmeden denemek. Yalıtılmış bir route table'daki sunucu, varsayılan route table'dan erişilemez görünür.
- Büyük çerez ya da başlıklarda TR7'nin 400 yanıtını uygulama hatası sanmak. "Invalid or too large request" sayfası tampon sınırını gösterir (Buffer size ne işe yarar; ne zaman değiştirmeliyim?).
- Sorun sürüyorsa bilgi toplamadan destek istemek. Destek kaydına eklenecekler: TR7 destek ekibine başvurmadan önce hangi bilgileri toplamalıyım?
Dokümantasyonda nasıl yapılır
