TR7 Load Balancer uygulamamda kod değişikliği gerektirir mi?
Kısa cevap
Hayır; uygulama kodunu değiştirmek gerekmez. TR7 uygulamanın önünde reverse proxy olarak çalışır ve bütün yapılandırma TR7 arayüzünden yapılır. Uygulama istekleri artık doğrudan istemciden değil TR7'den aldığı için üç konuda sunucu tarafında ayar gerekebilir: gerçek istemci IP'sinin görülmesi (X-Forwarded-For ve web sunucusunun bu header'ı okuması ya da SNAT → Use Client IP), HTTPS'in TR7'de sonlandırılması (X-Forwarded-Proto) ve oturumun sunucu belleğinde tutulması (persistence).
Nasıl Çalışır?
TR7 araya girdiğinde uygulamanın gördüğü üç şey değişir:
- Bağlantı TR7'den gelir. HTTP ve L7 TCP vService'lerde Kurum Servisine bağlantıyı TR7 kurar; sunucu varsayılan olarak istemcinin değil TR7'nin IP'sini görür (SNAT Default'ta bu adres, Kurum Servisinin route table'ında sunucuya giden arayüzün, sunucuyla (gateway üzerinden gidiliyorsa gateway'le) aynı subnet'teki Interface IP'sidir).
- HTTPS TR7'de sonlandırılabilir. Sertifika vService'teyse ve Kurum Servisinde SSL Service kapalıysa istek Kurum Servisine şifresiz (HTTP) ulaşır; uygulama isteğin aslında HTTPS ile geldiğini bilmez.
- İstekler birden fazla sunucuya dağılır. Persistence yoksa aynı kullanıcının ardışık istekleri farklı sunuculara gidebilir.
Bunların hiçbiri uygulama kodunu değiştirmeyi zorunlu kılmaz; aşağıdaki tabloda her birinin nasıl ele alındığı yer alır.
Uygulama Tarafında Kontrol Listesi
| Durum | Etkisi | Ne yapılır |
|---|---|---|
| Loglarda ya da uygulamada istemci IP'si kullanılıyor (HTTP) | Sunucu TR7'nin IP'sini görür | vService'te Add X-Forwarded-For Header açılır; web sunucusu bu header'ı istemci IP'si olarak okuyacak ve yalnızca TR7'nin IP'sine güvenecek şekilde ayarlanır: Nginx'te ngx_http_realip_module (set_real_ip_from + real_ip_header X-Forwarded-For), Apache'de mod_remoteip (RemoteIPHeader X-Forwarded-For + RemoteIPInternalProxy), IIS 8.5 ve üstünde W3C loguna özel alan olarak X-Forwarded-For eklenir. Alternatif olarak Kurum Servisinde SNAT → Use Client IP seçilir; bu durumda sunucunun yanıtı TR7 üzerinden dönmelidir |
| İstemci IP'si gerekiyor, sunucu bir TCP servisi (L7 TCP) | Sunucu TR7'nin IP'sini görür | Sunucu PROXY protocol destekliyorsa Kurum Servisinin Proxy alanında Proxy ya da Proxy v2 seçilir ve sunucuda PROXY protocol kabulü açılır; desteklemiyorsa SNAT → Use Client IP kullanılır |
| HTTPS TR7'de sonlandırılıyor | Uygulama isteği HTTP olarak görür; kendi HTTPS yönlendirmesi döngüye girebilir, sayfalarda http:// bağlantılar üretebilir | HTTP → HTTPS yönlendirmesi TR7'de yapılır (Protocol → HTTP → HTTPS). TR7 X-Forwarded-Proto header'ını kendiliğinden eklemez; gerekiyorsa Set HTTP Header action'ıyla eklenir ve uygulama bu header'a göre davranacak şekilde ayarlanır |
| Oturum sunucunun belleğinde tutuluyor | Kullanıcı başka sunucuya düşünce oturumu kaybolur | vService'te persistence açılır; New Cookie ile TR7 kendi cookie'sini üretip okur, Current Cookie ile uygulamanın oturum cookie'sini kullanır |
| Alan adı doğrudan sunucuyu gösteriyor | Trafik TR7'ye hiç gelmez | DNS kaydı vService'in dinlediği adrese yönlendirilir |
| Network vService, Direct Server Return modu | Paketin hedef adresi değişmez | Sunucuda vService adresi yerel adres (loopback) olarak tanımlanır ve bu adres için ARP yanıtı kapatılır (ayrıntı) |
Health check için uygulamada özel bir adres (ör. /health) açmak zorunlu değildir; TCP ya da HTTP kontrolü mevcut portla çalışır. Uygulamanın gerçekten çalıştığını doğrulayan basit bir sayfa ise HTTP kontrolünü daha anlamlı kılar.
Sık Karıştırılan Noktalar
- "X-Forwarded-For'u açınca loglar kendiliğinden düzelir." TR7 header'ı ekler; web sunucusunun bu header'ı istemci IP'si olarak okuyacak şekilde ayarlanması gerekir.
- "TR7, isteğin HTTPS olduğunu uygulamaya kendisi bildirir."
X-Forwarded-Protoheader'ı otomatik eklenmez; bir action ile eklenir. Uygulamanın kendi HTTP → HTTPS yönlendirmesi açıksa sonsuz yönlendirme döngüsü oluşabilir. - "Use Client IP her ağda çalışır." Kurum Servisinin yanıt trafiği TR7 üzerinden dönmelidir; dönmüyorsa bağlantılar tamamlanmaz.
- "Web sunucusu her X-Forwarded-For değerine güvenebilir." Sunucu yalnızca TR7'nin IP'sinden gelen header'ı dikkate alacak şekilde ayarlanır (
set_real_ip_from,RemoteIPInternalProxy); aksi hâlde istemci sahte bir IP yazabilir.
Dokümantasyonda nasıl yapılır
İlgili sorular
