WebSocket trafiği için yük dengeleme yapabilir miyim?
Kısa cevap
Evet. HTTP vService, WebSocket bağlantısını (HTTP Upgrade → 101 Switching Protocols) kendiliğinden taşır; TR7'de ayrıca açılacak bir WebSocket ayarı yoktur. Bağlantı kurulduktan sonra boşta kalan WebSocket bağlantısı Tunnel(Websocket) Timeout (varsayılan 120 saniye) dolunca kapatılır; bu süre bir Timeouts profiliyle uygulamanın ihtiyacına göre artırılır ve profil vService'in Details panelindeki Timeout kutusundan seçilir.
Sorun: WebSocket Bağlantıları Neden Kopar?
WebSocket bağlantısı bir HTTP isteğiyle başlar, Upgrade ile iki yönlü bir tünele dönüşür ve saatlerce açık kalabilir. Tünel kurulduktan sonra istemci ve sunucu zaman aşımları yerine Tunnel(Websocket) Timeout geçerli olur: bu süre boyunca iki yönden de veri geçmezse bağlantı kapatılır. Varsayılan 120 saniye, seyrek mesajlaşan uygulamalar için kısadır; kullanıcılar bağlantının kendiliğinden koptuğunu görür.
Çözüm: İki Yöntem
| Durumunuz | Uygun yöntem |
|---|---|
| Web uygulaması; WAF, HTTP Logs ve path'e göre yönlendirme kullanılsın | Yöntem 1: HTTP vService |
| WebSocket trafiği HTTP olarak işlenmeden, bağlantı düzeyinde iletilsin | Yöntem 2: L7 TCP vService |
Yöntem 1: HTTP vService Önerilen
- Nasıl çalışır HTTP vService, Upgrade isteğini Kurum Servisine iletir;
101yanıtından sonra bağlantıyı iki yönlü tünel olarak taşır. - Nerede açılır WebSocket için ek ayar gerekmez; süre için vService → Details → Timeout → Timeouts profili
- Gereksinim
ws://için HTTP,wss://için Encrypted (HTTPS) grubundan bir protokol (HTTP/1.1 ya da HTTP/2) ve sertifika - vService tipi HTTP
- Kurum Servisi tarafı Uygulamanın WebSocket Upgrade isteğini kabul etmesi yeterlidir; TR7 için sunucuda ek ayar gerekmez.
Adım adım yapılandırma
Load Balancer → Profiles → Timeouts → Add adımları izlenir (nasıl eklenir). Uygun bir profil zaten varsa 4. adıma geçilir; başka vService'lerin kullandığı bir profili düzenlemek onları da etkiler.
Name girilir. Tunnel(Websocket) Timeout alanına, uygulamanın iki mesaj arasında en uzun sessiz kaldığı süreden büyük bir değer saniye olarak yazılır (ör. 3600). Alan en çok 60.000 saniye kabul eder. Diğer alanlar varsayılan değerleriyle kalabilir.
Formun altındaki Add butonuna tıklanır.
Load Balancer → Load Balancer vService List ekranında HTTP vService seçilir ve Edit butonuna tıklanır.
Formun sağ üstündeki Details anahtarı açılır; panelde Timeout kutusu işaretlenir ve oluşturulan profil seçilir.
wss:// kullanılacaksa frontend satırının Protocol alanında Encrypted (HTTPS) grubundan HTTP/1.1 ya da HTTP/2 seçili ve Certificate alanında sertifika seçili olmalıdır. Sertifika TR7'de yoksa önce Certificates & PKI → SSL/TLS Certificates → Add ile yüklenir (Sertifikamı TR7'ye nasıl yüklerim; hangi formatlar destekleniyor?).
Save butonuna tıklanır. Kayıtla birlikte profildeki süre bu vService'te geçerli olur; uygulamanın ilerlemesi ekranın sağ altındaki senkron göstergesinden izlenir. Cluster kurulumunda değişiklik varsayılan auto-sync ile eş cihaza da aktarılır; Manual Sync Mode açıksa Synchronize ile elle gönderilir.
Doğrulama
curl -i -N --http1.1 -H "Connection: Upgrade" -H "Upgrade: websocket" -H "Sec-WebSocket-Version: 13" -H "Sec-WebSocket-Key: SGVsbG8sIHdvcmxkIQ==" https://www.example.com/wsHTTP/1.1 101 Switching Protocols--http1.1 gereklidir; HTTP/2 anlaşılırsa curl Upgrade başlığını gönderemez.vService'in HTTP Logs ekranında WebSocket isteğinin durum kodu incelenir.
101Yöntem 2: L7 TCP vService
- Nasıl çalışır L7 TCP, akışı HTTP olarak ayrıştırmadan Kurum Servisine iletir; WebSocket el sıkışması ve mesajlar olduğu gibi geçer.
- Nerede açılır vService → Type: L7 TCP → Frontend → Protocol: TCP (TLS Kurum Servisinde) ya da TCP + TLS (TLS TR7'de)
- Gereksinim WAF, HTTP Logs ve path'e göre yönlendirme gerekmemesi
- vService tipi L7 TCP
- Kurum Servisi tarafı Protocol TCP seçilirse
wss://için sertifika ve TLS sunucuda bulunur; TCP + TLS seçilirse sunucu şifresiz WebSocket (ws://) karşılar.
Adım adım yapılandırma
Uzun süre sessiz kalan bağlantılar için Yöntem 1'in 1–3. adımlarındaki gibi Tunnel(Websocket) Timeout değeri artırılmış bir Timeouts profili oluşturulur; L7 TCP'de de bağlantı kurulduktan sonra geçerli olan süre budur.
Load Balancer → Backend Services → Add adımları izlenir (Kurum Servisi nasıl eklenir; hangi bilgiler zorunludur?). Kurum Servisi, vService formundaki seçicinin Backend Service butonuyla formdan çıkmadan da oluşturulabilir.
Backend Service Name ve Address (sunucunun IP'si ve WebSocket portu) girilir.
Formun altındaki Add butonuna tıklanır.
Load Balancer → Load Balancer vService List → Add adımları izlenir; Name girilir ve Type olarak L7 TCP seçilir.
Frontend satırında IP seçilir ve port yazılır. TLS Kurum Servisinde kalacaksa Protocol TCP; TR7'de sonlandırılacaksa TCP + TLS seçilir ve Certificate alanında sertifika seçilir. IP listede yoksa önce Network → Interfaces → Actions → Add IP ile arayüze eklenir (nasıl eklenir); aynı form Frontend IP listesindeki Add IP ile de açılır (Frontend IP'sini neden elle yazamıyorum; listede olmayan bir IP'yi (ör. IPv6) vService'te kullanmak için ne yapmalıyım?).
Default Backend Services tablosunda Kurum Servisi seçilir.
Save butonuna tıklanır. Cluster kurulumunda değişiklik varsayılan auto-sync ile eş cihaza da aktarılır; Manual Sync Mode açıksa Synchronize ile elle gönderilir.
Doğrulama
websocat wss://www.example.com/wsBağlantı açık kalır, mesajlar iki yönde iletilirSık Yapılan Hatalar
- Süreyi varsayılanda bırakmak. Tunnel(Websocket) timeout 120 saniyedir; seyrek mesajlaşan uygulamalarda bağlantılar boşta kopar. Uygulama 60.000 saniyeden uzun sessiz kalabiliyorsa istemci ya da sunucu tarafında periyodik ping mesajı açılır.
- Profili seçip Timeout kutusunu işaretlememek. Profil, vService'in Details panelindeki Timeout kutusu işaretlenip seçilmedikçe uygulanmaz.
ws://isteğini 80 portundaki HTTP → HTTPS yönlendirmesine bırakmak. WebSocket istemcilerinin 3xx yönlendirmeyi izlemesi zorunlu değildir (RFC 6455 §4.1); istemci doğrudanwss://adresine bağlanmalıdır.
Dokümantasyonda nasıl yapılır
