Cookie desteklemeyen istemciler (mobil uygulama, API client) için persistence nasıl sağlanır?
Kısa cevap
Persistence, istemcinin her istekte gönderdiği başka bir değere bağlanır. En esnek yol, Hash persistence'ta Hash key olarak bir HTTP header'ının değerini veren Smart Variable (ör. X-Client-ID, API anahtarı, Authorization) kullanmaktır; docs da API istemcileri için header tabanlı Hash'i önerir. HDR ya da URL Param algoritmaları da header'a ya da URL parametresine göre sunucu seçer. İstemci IP'si son çare olarak kullanılır. New cookie, Current cookie ve SAM cookie gerektirdiği için bu istemcilerde çalışmaz.
Sorun: İstemci Cookie Saklamıyor
Mobil uygulamalar, API istemcileri, IoT cihazları ve sunucudan sunucuya entegrasyonlar çoğu zaman cookie saklamaz ya da her istekte yeni bağlantı açar. TR7'nin eklediği ya da uygulamanın ürettiği cookie geri gelmediği için cookie tabanlı persistence çalışmaz; istekler sunuculara dağılır ve sunucu yerelinde tutulan oturum bilgisi kaybolur.
Çözüm: Altı Yöntem
| Durumunuz | Uygun yöntem |
|---|---|
| İstemci kimliğini taşıyan bir header var; eşleme korunmalı | Yöntem 1: Hash + header anahtarı |
| Header var; tablo tutmadan hash yeterli | Yöntem 2: HDR algoritması |
| Kimlik URL parametresinde | Yöntem 3: URL Param algoritması |
| İstemciyi tanıtan bir değer yok | Yöntem 4: İstemci IP'si |
| TCP (TLS geçişi, RDP) trafiği | Yöntem 5: L7 TCP'de Hash / RDP Cookie |
| Komut satırından yapmak istiyorum | Yöntem 6: WEB-CLI |
Yöntem 1: Hash + Header Anahtarı Önerilen
- Nasıl çalışır Belirtilen header'ın değeri anahtar olur; ilk istekte algoritmanın seçtiği Kurum Servisi tabloya yazılır ve aynı değerli istekler süre dolana kadar oraya gider.
- Nerede açılır vService → Edit → Details → LB Algorithm kutusu → Persistence → Hash → Hash Key
- Gereksinim İstemcinin her istekte aynı header'ı göndermesi
- vService tipi HTTP
Adım adım yapılandırma
Load Balancer → Load Balancer vService List ekranında HTTP vService seçilip Edit tıklanır.
Details → LB Algorithm kutusunda self-persistent olmayan bir algoritma (ör. Round Robin, Least Connection) seçili olduğu kontrol edilir.
Persistence alanında Hash seçilir.
Hash Key listesi ilk uygun Smart Variable ile açılır; satırda istek header'ının içeriğini veren değişken seçilip header adı (ör. X-Client-ID) yazılır (HTTP Header Info). Uzun değerlerde (ör. Authorization içindeki JWT) anahtara Hash ya da JWT Payload Query fonksiyonu eklenerek kısa ve kararlı bir değer üretilir (fonksiyonlar).
Hash Key List Size (varsayılan 3.000.000; 10.000 – 100.000.000) ve Hash Key Expire Time (varsayılan 7 gün; 10 dk – 365 gün) gerekirse ayarlanır.
Save tıklanır. Hash tablosu cihaz yereldir ve vService yeniden yüklendiğinde yeniden kurulur; ayarlar Clustering açıkken ve Manual Sync Mode kapalıyken (varsayılan) eş cihaza otomatik aktarılır.
Doğrulama
Aynı başlık değeriyle birkaç istek gönderilir (ör. istemciden curl -I -H "X-Client-ID: abc" https://192.0.2.80/); HTTP Logs ekranında Backend Service kolonuna bakılır.
Aynı değer → aynı Kurum ServisiYöntem 2: HDR Algoritması
- Nasıl çalışır Sunucu, belirtilen header'ın değerinin hash'iyle seçilir; tablo tutulmaz. Header olmayan istekler round robin ile dağıtılır.
- Nerede açılır vService → Edit → Details → LB Algorithm → HDR
- Gereksinim İstemcinin her istekte aynı header'ı göndermesi
- vService tipi HTTP
Adım adım yapılandırma
Load Balancer → Load Balancer vService List ekranında HTTP vService seçilip Edit tıklanır.
Details → LB Algorithm kutusunda Algorithm alanında HDR seçilir ve zorunlu HDR Name alanına header adı (ör. X-Client-ID) yazılır. HDR seçilince Persistence alanı gizlenir.
Save tıklanır.
Doğrulama
Aynı başlık değeriyle birkaç istek gönderilir (ör. istemciden curl -I -H "X-Client-ID: abc" https://192.0.2.80/); HTTP Logs ekranında Backend Service kolonuna bakılır.
Aynı değer → aynı Kurum ServisiYöntem 3: URL Param Algoritması
- Nasıl çalışır Sunucu, belirtilen URL parametresinin değerinin hash'iyle seçilir; Check Post Parameters açıksa parametre POST gövdesinde de aranır.
- Nerede açılır vService → Edit → Details → LB Algorithm → URL Param
- Gereksinim Kimliğin her istekte URL parametresinde (ya da POST gövdesinde) bulunması
- vService tipi HTTP
Adım adım yapılandırma
Load Balancer → Load Balancer vService List ekranında HTTP vService seçilip Edit tıklanır.
Details → LB Algorithm kutusunda Algorithm alanında URL Param seçilir, zorunlu URL Parameter to Use alanına parametre adı (ör. client_id) yazılır; gerekirse Check Post Parameters açılır (varsayılan kapalı).
Save tıklanır.
Doğrulama
Aynı parametre değeriyle birkaç istek gönderilip HTTP Logs'ta Backend Service kolonuna bakılır.
Aynı değer → aynı Kurum ServisiYöntem 4: İstemci IP'si
- Nasıl çalışır Persistence istemcinin IP adresine bağlanır. Mobil istemcilerde IP ağ değiştikçe değişir; NAT arkasındaki kullanıcılar tek sunucuya toplanır.
- Nerede açılır HTTP: LB Algorithm → Source ya da Persistence → Hash + istemci IP adresi · Network: L4 Persistence
- Gereksinim İstemci IP'lerinin sabit ve çeşitli olması
- vService tipi Tümü
Adım adım yapılandırma
TR7'nin önünde bir proxy ya da CDN varsa gerçek istemci IP'sinin çözülmesi için bir Trusted Proxies profili gerekir (yalnızca HTTP vService); yoksa 1–3. ve 5. adımlar atlanır. Load Balancer → Profiles → Trusted Proxies → Add tıklanır.
Trusted Proxy Profile Name alanına profil adı girilir; Real IP from seçilir ve Trusted Networks alanına proxy ya da CDN'in IP aralıkları CIDR olarak girilir.
Formdaki Add butonuna tıklanır.
Load Balancer → Load Balancer vService List ekranında vService seçilip Edit tıklanır.
Details panelinde Trusted Proxy işaretlenir ve Trusted Proxy Profile alanında 1–3. adımlarda oluşturulan profil seçilir (vService'e nasıl eklenir). Profil atandıktan sonra Hash anahtarında Client IP Address değişkeni çözülmüş gerçek istemci IP'sini taşır; Real client IP (trusted proxy) değişkeni ise öndeki proxy'nin adresidir ve anahtar olarak kullanılmaz. Ayrıntı: TR7'nin önünde Cloudflare / Akamai gibi bir CDN var; gerçek istemci IP'sini nasıl alırım (Trusted Proxy)?
LB Algorithm kutusunda: HTTP vService'te Source algoritması ya da Hash persistence'ta istemci IP adresi anahtarı; L7 TCP'de Hash + istemci IP adresi; Network'te L4 Persistence kullanılır.
Save tıklanır.
Doğrulama
Aynı IP'den gelen isteklerin HTTP Logs'ta aynı Kurum Servisine gittiği görülür.
Aynı IP → aynı Kurum ServisiYöntem 5: L7 TCP'de Hash / RDP Cookie
- Nasıl çalışır L7 TCP'de Hash, SNI, JA4, istemci IP'si gibi bağlantı düzeyindeki değerlerden anahtar üretir; RDP istemcileri için RDP Cookie algoritması RDP bağlantısındaki cookie'ye göre sunucu seçer.
- Nerede açılır L7 TCP vService → Details → LB Algorithm kutusu
- Gereksinim Anahtar olacak değerin her bağlantıda bulunması
- vService tipi L7 TCP
Adım adım yapılandırma
Load Balancer → Load Balancer vService List ekranında L7 TCP vService seçilip Edit tıklanır.
Details → LB Algorithm kutusunda Persistence → Hash seçilip Hash Key listesine uygun bağlantı değişkeni eklenir ya da RDP için Algorithm → RDP Cookie seçilir ve zorunlu RDP cookie name alanına mstshash yazılır.
Save tıklanır.
Doğrulama
TCP Logs ekranında aynı istemcinin bağlantılarının sunucu kolonuna bakılır.
Aynı anahtar → aynı sunucuYöntem 6: WEB-CLI
- Nasıl çalışır Persistence ve algoritma komut satırından yazılır.
- Nerede açılır TR7 WEB-CLI →
lb service update - Gereksinim WEB-CLI erişimi
- vService tipi HTTP, L7 TCP
Adım adım yapılandırma
Sunucu devamlılığı alanları yazılır; <vService> yerine vService kimliği yazılır (Tab listeler). Anahtar Smart Variable biçiminde verilir; header içeriği için %REQHEADER(header-adı) kullanılır ve parantez içerdiği için tek tırnakla yazılır:
lb service update id <vService> --persistence dynamicPersistence --dynamicPersistenceKeys.0 '%REQHEADER(X-Client-ID)'.0 listedeki ilk anahtarı yazar; vService'te önceden Hash anahtarı varsa ilk anahtarın yerine geçer. Mevcut anahtarlar lb service show <vService> ile görülür.
Dağıtım algoritması alanıyla algoritma ve zorunlu ad alanı birlikte yazılır:
lb service update id <vService> --algorithm hdr --hdrName X-Client-IDDoğrulama
lb service show <vService> çıktısında persistence ve algorithm alanlarına bakılır.
Persistence dynamicPersistence (Hash)Uygun Olmayan Yöntemler
- New cookie / Current cookie: İstemci cookie'yi geri göndermezse çalışmaz.
- Session Affinity Manager (SAM): Cookie taşımayan istekler oturum tablosuna işlenmez.
- Cookie Based Connection Persistency aksiyonu: Cookie tabanlıdır.
Sık Yapılan Hatalar
- Anahtar header'ının her istekte gelmediğini gözden kaçırmak. Header'sız istekler aynı boş anahtarı paylaşır ve tek sunucuda toplanır.
- Uzun token'ı doğrudan anahtar yapmak. Hash ya da JWT Payload Query fonksiyonuyla kısa ve kararlı bir değer üretilmesi önerilir.
- Self-persistent algoritma seçiliyken Hash aramak. HDR, URL Param ya da Source seçiliyken Persistence alanı görünmez; Hash için bu algoritmalar dışında bir algoritma seçilir.
- Mobil istemcilerde IP tabanlı persistence'a güvenmek. IP ağ değiştikçe değişir.
Dokümantasyonda nasıl yapılır
