URL path'ine göre farklı sunuculara nasıl yönlendiririm (ör. /api → API sunucuları)?
Kısa cevap
Bir Path condition'ı oluşturulur (Criteria = Path, eşleştirme Start, Query = /api/) ve HTTP vService'te Conditional Backend Services bloğuyla API Kurum Servislerine bağlanır; condition'a uymayan istekler Default Backend Services'e gider. Daha esnek eşleşme için Regex, uzun yol listeleri için Dynamic List kullanılır. Kullanıcıyı başka bir adrese göndermek isteniyorsa Location Redirection action'ı seçilir.
Sorun: Farklı Yollar Farklı Uygulamalara Ait
Aynı alan adı altında web sitesi, API ve yönetim paneli gibi farklı uygulamalar yol ile ayrılabilir (/, /api, /admin). Bu uygulamalar farklı sunucularda çalıştığında isteklerin yola göre doğru sunucu grubuna gönderilmesi gerekir; aksi hâlde API istekleri web sunucularına düşer ve hata alır.
Çözüm: Üç Yöntem
Yöntem 1 ve Yöntem 2 aynı yapılandırmayı (Content Switching) arayüzden ya da komut satırından kurar; Yöntem 3 ise sunucu seçmez, istemciyi başka bir adrese yönlendirir.
| Durumunuz | Uygun yöntem |
|---|---|
| Yola göre farklı Kurum Servislerine göndermek istiyorum | Yöntem 1: Path condition'ı + Conditional Backend Services |
| Aynı yapılandırmayı komut satırından yapmak istiyorum | Yöntem 2: WEB-CLI |
Kullanıcıyı başka bir adrese (ör. api.example.com) göndermek istiyorum | Yöntem 3: Location redirection |
Yöntem 1: Path Condition'ı + Conditional Backend Services Önerilen
- Nasıl çalışır Condition'a uyan istekler bloğun Kurum Servislerine gider; bloklar yukarıdan aşağı değerlendirilir, ilk eşleşen blok isteği alır.
- 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
API 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; sunucunun erişilemez olduğunun anlaşılması için bir Health Check profili seçilir. Sunucular tek hedef olarak yönetilecekse Load Balancer → Backend Groups altında bir Backend Group oluşturulur. 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 (isteğe bağlı; seçim listelerinde bu adla görünür). Criteria = Path seçilir; eşleştirme yöntemi Start (varsayılan Exact match) ve Query = /api/ girilir. Büyük/küçük harf farkı gözetilmeyecekse Case Insensitive işaretlenir (varsayılan kapalı).
Gerekirse eşleştirme yöntemi değiştirilir:
| İhtiyaç | Seçim |
|---|---|
/api ve /api/... birlikte, /apiv2 hariç | Eşleştirme Regex, Query ^/api(/|$) |
| Çok sayıda yol tek listede | Criteria = Dynamic List; Key to search alanında yol, List alanında yollar |
Add butonuna tıklanır.
Load Balancer → Load Balancer vService List adımları izlenir ve yönlendirme yapılacak HTTP vService açılır.
Default Backend Services tablosundaki + Conditional backend services butonuna tıklanır; form üzerinde yeni bir blok açılır (Conditional Backend Services).
Bloğun Select Conditions alanında 4. adımda kaydedilen condition seçilir; bloğun Kurum Servisi seçicisinde API Kurum Servisleri (ya da Backend Group) seçilir. Birden fazla blok varsa daha özel olan blok sürüklenerek üste alınır.
Save butonuna tıklanır. Ayar kaydedildiğinde geçerli olur; cluster yapısında varsayılan auto-sync ile eş cihaza da aktarılır.
Doğrulama
Left Monitor Panel → Load Balancer vServices → vService → Logs & Tracking → HTTP Logs ekranında /api/ ile başlayan isteğin kaydında isteği yanıtlayan Kurum Servisine bakılır (HTTP Loglarını Görüntüleme). Kayıt üretilmesi için vService'te LOG alanının açık olması gerekir (HTTP Logları Nasıl Aktif Edilir?).
/api/ istekleri → API Kurum Servisi · diğer istekler → Default Backend ServicesBir /api/ isteği ve bir başka yol için istek gönderilir; yanıtların hangi uygulamadan geldiği karşılaştırılır.
curl -s http://203.0.113.10/api/healthYanıt API uygulamasından gelirYöntem 2: WEB-CLI
- Nasıl çalışır Path condition'ı ve koşullu blok komut satırından tanımlanır; sonuç Yöntem 1 ile aynıdır.
- 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 path query /api/ --content_placement start --name api-yolu--content_placement verilmezse eşleştirme exactMatch olur; büyük/küçük harf ayrımını kaldırmak için --caseInsensitive true eklenir.
lb condition listÇıktıda condition'ın kimliği (lbConditions- ile başlayan değer) alınır. Koşullu blok condition'ı adıyla değil bu kimlikle tanır.
lb service show <vService>Çıktıdaki dynamicBackendList listesinde kaç blok olduğu görülür. Yeni blok için ilk boş sıra numarası kullanılır: vService'te hiç koşullu blok yoksa 0, iki blok varsa 2. Dolu bir sıra numarası yazılırsa o sıradaki blok değiştirilir.
Aşağıdaki örnek, vService'te henüz koşullu blok olmadığı durum içindir (sıra 0):
lb service update id <vService> --dynamicBackendList.0.cond "<koşul-kimliği>" --dynamicBackendList.0.beList.0 <backend-service>İkinci bir Kurum Servisi için --dynamicBackendList.0.beList.1 eklenir. <backend-service> yerine Kurum Servisinin ya da Backend Group'un adı yazılır.
Doğrulama
vService yeniden görüntülenir; yeni bloğun condition kimliği ve Kurum Servisi listede yer almalıdır. Yönlendirme Yöntem 1'in doğrulama kartlarıyla denetlenir.
lb service show <vService>dynamicBackendList içinde yeni blokYöntem 3: Location Redirection
- Nasıl çalışır Condition'a uyan istek başka bir adrese (ör.
https://api.example.com) 3xx ile yönlendirilir; bu bir sunucu seçimi değildir, istemci yeni adrese yeniden istek gönderir. Ayrıntı: Belirli bir URL'yi başka bir URL'ye 301/302 ile nasıl yönlendiririm? - Nerede açılırLoad Balancer → Actions · vService formu → Details → Actions
- Gereksinim Bir condition (Location redirection condition'sız kaydedilirse hiç çalışmaz)
- vService tipi HTTP
Adım adım yapılandırma
Yönlendirilecek trafiği tanımlayan condition yoksa Yöntem 1'in 2–4. adımlarıyla oluşturulur (ör. Path, Start, /api/).
Load Balancer → Actions → Add adımları izlenir.
Action Type = Location redirection seçilir; Redirect Location alanına hedef adres, Redirect Code alanında yönlendirme kodu seçilir (varsayılan 301, kalıcı; geçici yönlendirme için 302) ve Conditions alanında condition seçilir.
Add butonuna tıklanır.
Load Balancer → Load Balancer vService List adımları izlenip vService açılır ve formun üstündeki Details butonuna tıklanır.
Actions alanında oluşturulan action seçilir.
Save butonuna tıklanır.
Doğrulama
Condition'a uyan bir istek gönderilip yanıt başlıklarına bakılır.
curl -sI http://203.0.113.10/api/healthHTTP/1.1 301 · Location: https://api.example.comSık Yapılan Hatalar
- Query'ye
/apiyazmak. Start eşleşmesi/apiv2ve/api-docsgibi yolları da yakalar;/api/ya da^/api(/|$)regex'i kullanılır. - Büyük/küçük harfi gözden kaçırmak. Eşleşme varsayılan olarak harfe duyarlıdır;
/API/istekleri için Case insensitive işaretlenir. - Path'in sorgu dizesini içerdiğini sanmak. Path
?sonrasını içermez; sorgu dizesi de değerlendirilecekse Path + Query kullanılır. - TR7'nin
/api/önekini kendiliğinden kaldırdığını sanmak. Önek Kurum Servisine olduğu gibi iletilir; kaldırılması gerekiyorsa Set Path action'ı kullanılır (URL path'ini backend'e gitmeden önce yeniden yazabilir miyim (rewrite)?). - Blokların sırasını gözden kaçırmak. Daha genel bir blok üstteyse altındaki özel blok hiç eşleşmez.
- WEB-CLI'da condition'ı adıyla bağlamak.
--dynamicBackendList.N.condcondition kimliğini bekler; ad yazılırsa blok hiçbir istekle eşleşmez.
Dokümantasyonda nasıl yapılır
