HTTP Header, cookie veya query parametresine göre yönlendirme yapabilir miyim?
Kısa cevap
Evet, HTTP vService'te. HTTP Header, User Cookie Name ve Query Parameter condition'ları oluşturulup Conditional Backend Services bloklarına bağlanır; değer Exact match, Start, End, Includes ya da Regex ile eşleştirilir, Is present ile yalnızca başlığın, cookie'nin ya da parametrenin varlığı denetlenir. Birden fazla değişkeni birlikte değerlendirmek ya da bir değeri uzun bir listede aramak için Dynamic Condition ve Dynamic List kullanılır.
Sorun: Karar İsteğin İçindeki Bir Değere Bağlı
Beta kullanıcılarını, belirli bir müşteriyi, bir API sürümünü ya da test isteklerini ayrı sunuculara göndermek için isteğin bir başlığına, cookie'sine ya da URL parametresine bakmak gerekir. Bu değerlere göre isteklerin farklı Kurum Servislerine yönlendirilmesi istenir.
Çözüm: Üç Yöntem
Üç yöntem de aynı yapıyı (condition + koşullu blok) kurar; fark, condition'ın nasıl tanımlandığıdır.
| Durumunuz | Uygun yöntem |
|---|---|
| Tek bir başlığa, cookie'ye ya da parametreye bakmak yeterli | Yöntem 1: HTTP header / User Cookie Name / Query parameter condition'ı |
| Birden fazla değeri birlikte değerlendirmek ya da değeri uzun bir listede aramak istiyorum | Yöntem 2: Dynamic condition / Dynamic list |
| Cookie'ye göre yönlendirmeyi komut satırından kurmak istiyorum | Yöntem 3: WEB-CLI |
Yöntem 1: HTTP Header / User Cookie Name / Query Parameter Condition'ı Önerilen
- Nasıl çalışır İstekteki başlık, cookie ya da parametre değeri condition'la karşılaştırılır; eşleşen istek bloğun Kurum Servislerine, diğerleri sonraki bloklara ya da Default Backend Services'e gider.
- Nerede açılırLoad Balancer → Conditions · vService formu → + Conditional backend services
- Gereksinim Hedef sunucuların Kurum Servisi olarak tanımlı olması
- vService tipi HTTP
Adım adım yapılandırma
Bloğun yönlendireceği sunucular (ör. beta sunucuları) TR7'de henüz Kurum Servisi olarak tanımlı değilse önce eklenir; tanımlıysa bu adım atlanır. Load Balancer → Backend Services → Add ile her sunucu için Backend Service Name ve Address girilir ve bir Health Check profili seçilir. Ayrıntı: Kurum Servisi nasıl eklenir; hangi bilgiler zorunludur?
Load Balancer → Conditions → Add adımları izlenir; form Conditions · Nasıl eklenir? bölümünde anlatılır.
Condition Name girilir ve Criteria olarak bakılacak değere göre aşağıdakilerden biri seçilir:
| Criteria | Doldurulan alanlar | Örnek |
|---|---|---|
| HTTP Header | Header Name (soldaki seçicide Request, başlık adı), eşleştirme yöntemi, Query | Request · X-Canary, Exact match, true |
| User Cookie Name | Cookie Name, eşleştirme yöntemi, Query | beta, Exact match, 1 |
| Query Parameter | Query Parameter (parametre adı), eşleştirme yöntemi, Query | version, Exact match, 2 |
Eşleştirme yöntemi varsayılan olarak Exact Match'tir; Is present seçilirse Query alanı kaybolur ve yalnızca başlığın, cookie'nin ya da parametrenin istekte olup olmadığına bakılır. Büyük/küçük harf farkı gözetilmeyecekse Case Insensitive işaretlenir (varsayılan kapalı). Header name'in solundaki seçicide Response seçilirse condition yanıt başlığına bakar; koşullu blokta seçilebilse de Kurum Servisi istek aşamasında seçildiği için hiçbir zaman eşleşmez.
Add butonuna tıklanır.
Load Balancer → Load Balancer vService List adımları izlenir ve HTTP vService açılır.
Default Backend Services tablosundaki + Conditional backend services butonuna tıklanır (Conditional Backend Services).
Bloğun Select Conditions alanında condition, Kurum Servisi seçicisinde hedef Kurum Servisleri (ya da Backend Group) seçilir.
Save butonuna tıklanır.
Doğrulama
Left Monitor Panel → Load Balancer vServices → vService → Logs & Tracking → HTTP Logs ekranında isteği yanıtlayan Kurum Servisine bakılır (HTTP Loglarını Görüntüleme). Kayıt için vService'te LOG alanı açık olmalıdır.
Değeri taşıyan istek → bloğun Kurum Servisi · diğerleri → Default Backend ServicesAynı istek değerle ve değersiz gönderilir; yanıtların farklı Kurum Servislerinden geldiği görülür.
curl -s -H "X-Canary: true" http://203.0.113.10/ · curl -s --cookie "beta=1" http://203.0.113.10/ · curl -s "http://203.0.113.10/?version=2"Değeri taşıyan istek bloğun Kurum Servisinden yanıt alırYöntem 2: Dynamic Condition / Dynamic List
- Nasıl çalışırDynamic Condition, bir Smart Variable'ın değerini bir operatörle (ör. eşittir, içerir, aralıkta) karşılaştırır; Dynamic List bir Smart Variable'ın değerini (ör. bir başlık ya da cookie) girilen uzun bir listede arar.
- Nerede açılırLoad Balancer → Conditions → Dynamic Condition / Dynamic List
- Gereksinim Hedef sunucuların Kurum Servisi olarak tanımlı olması
- vService tipi HTTP
Adım adım yapılandırma
Load Balancer → Conditions → Add adımları izlenir.
Criteria = Dynamic Condition seçildiğinde Query Key alanında karşılaştırılacak Smart Variable, Operator alanında operatör ve operatörün istediği karşılaştırma değeri girilir. Criteria = Dynamic list seçildiğinde Key to Search alanında aranacak Smart Variable (varsayılan istemci IP adresi), Search Method ve List alanında değerler girilir.
Add butonuna tıklanır.
Yöntem 1'in 5–8. adımları uygulanır: vService açılır, + Conditional backend services ile blok eklenir, Select Conditions alanında bu condition seçilir ve Save butonuna tıklanır.
Doğrulama
Yöntem 1'deki gibi HTTP Logs ekranında isteği yanıtlayan Kurum Servisine bakılır.
Condition'a uyan istek → bloğun Kurum ServisiYöntem 3: WEB-CLI
- Nasıl çalışır User Cookie Name condition'ı ve koşullu blok komut satırından tanımlanır. HTTP header ve Query parameter condition'ları arayüzden (Yöntem 1) oluşturulur; oluşturulan condition bu yöntemin 2–4. adımlarıyla bloğa bağlanabilir.
- Nerede açılır TR7 WEB-CLI →
lb condition·lb service - Gereksinim WEB-CLI erişimi; hedef Kurum Servislerinin tanımlı olması
- vService tipi HTTP
Adım adım yapılandırma
lb condition add criteria user_cookie cookieName beta query 1 --name beta-cookieEşleştirme varsayılan olarak exactMatch'tir; başka bir yöntem için --content_placement start, end, sub ya da regex eklenir.
lb condition listÇıktıda condition'ın kimliği (lbConditions- ile başlayan değer) alınır; blok condition'ı adıyla değil bu kimlikle tanır.
lb service show <vService>dynamicBackendList listesindeki blok sayısı görülür; yeni blok için ilk boş sıra numarası kullanılır (hiç blok yoksa 0). Dolu bir sıra numarası yazılırsa o sıradaki blok değiştirilir.
vService'te henüz koşullu blok olmadığı durum için (sıra 0):
lb service update id <vService> --dynamicBackendList.0.cond "<koşul-kimliği>" --dynamicBackendList.0.beList.0 <backend-service><backend-service> yerine Kurum Servisinin ya da Backend Group'un adı yazılır.
Doğrulama
vService yeniden görüntülenir; yönlendirme Yöntem 1'in doğrulama kartlarıyla denetlenir.
lb service show <vService>dynamicBackendList içinde yeni blokSık Yapılan Hatalar
- Header name'de Response seçmek. Kurum Servisi seçimi istek aşamasında yapılır; yanıt başlığına bakan condition koşullu blok listesinde görünse de hiçbir zaman eşleşmez. Yönlendirme için Request seçilir.
- Değer gelmediğinde ne olacağını düşünmemek. Başlık, cookie ya da parametre taşımayan istekler sonraki bloğa ya da Default Backend Services'e gider.
- Harf duyarlılığını gözden kaçırmak. Eşleşme varsayılan olarak harfe duyarlıdır.
- Bu değerleri güvenlik kararı için tek başına kullanmak. Başlık, cookie ve parametre istemci tarafından değiştirilebilir; erişim kısıtı için kaynak IP ya da kimlik doğrulama gibi değiştirilemeyen ölçütlerle birlikte kullanılır.
- WEB-CLI'da condition'ı adıyla bağlamak.
--dynamicBackendList.N.condcondition kimliğini bekler.
Dokümantasyonda nasıl yapılır
