Virtual Hosting nedir, nasıl çalışır?
Kısa cevap
Virtual Hosting, birden fazla HTTP vService'in aynı IP:port'u paylaşmasını sağlar. Her vService'e kendi alan adları yazılır; TR7 gelen isteğin alan adına bakar (HTTPS'te TLS el sıkışmasındaki SNI, şifresiz trafikte Host Header'ı) ve isteği o alan adını listesinde taşıyan vService'e gönderir. Böylece tek bir public IP'den, her biri kendi sertifikası, WAF'ı ve Kurum Servisleri olan birçok site yayınlanır. Paylaşılan vService'lerde wildcard sertifika kullanılıyorsa TLS Security Profile'daki SNI/Host Validation açılarak isteklerin yanlış vService'e düşmesi önlenir.
Nasıl Çalışır?
- Ortak adres: IP:port'u paylaşan vService'lerin hepsinde Virtual Hosting listesi doludur; TR7 bu IP:port'a gelen bağlantıyı vService'lerden birine iletmeden önce alan adına bakar.
- Alan adına bakılır: HTTPS'te TLS açılmadan, istemcinin el sıkışmada gönderdiği SNI okunur. Şifresiz trafikte isteğin Host header'ı okunur.
- İlgili vService'e iletilir: Alan adı hangi vService'in listesinde varsa bağlantı ona iletilir; gerçek istemci IP'si korunur.
- TLS'i vService sonlandırır: HTTPS'te sertifika, seçilen vService'in Certificate alanından sunulur; her site kendi sertifikasını kullanır. İsteğin bundan sonraki bütün işlemi (WAF, action'lar, Kurum Servisi seçimi) o vService'in ayarlarıyla yapılır.
Kurallar
| Kural | Açıklama |
|---|---|
| Yalnızca HTTP | Virtual Hosting yalnızca HTTP vService'te vardır; L7 TCP ve Network'te yoktur. |
| Ortak IP önce eklenir | Paylaşılan IP, vService'lerden önce Network → Interfaces altında bir arayüze eklenir. |
| Herkesin listesi dolu | IP:port'u paylaşan bütün vService'lerde alan adı listesi dolu olmalıdır; listesi boş bir vService aynı IP:port'a tanımlanamaz. |
| Aynı şifreleme sınıfı | HTTPS (HTTP/1.1, HTTP/2) ve şifresiz (HTTP, HTTP → HTTPS) satırlar aynı IP:port'u paylaşamaz. |
| Tam eşleşme | Listeye alan adı (wildcard dahil), IP adresi ya da port ekli bir değer (a.example.com:8080) yazılır; wildcard içermeyen giriş gelen değerle birebir karşılaştırılır. Karşılaştırma büyük/küçük harfe duyarlıdır, bu yüzden alan adları küçük harfle yazılır. Şifresiz trafikte 80 dışındaki portlarda Host Header'ı port numarasını da içerir; bu portlarda alan adı listeye port ile birlikte yazılır (a.example.com:8080). HTTPS'te SNI port içermez, listeye yalnızca alan adı yazılır. |
| Wildcard | *.example.com desteklenir ve birden fazla alt alan seviyesiyle eşleşir; example.com'un kendisiyle eşleşmez. |
| Eşleşmeyen istek | Şifresiz istek 503 alır; HTTPS'te SNI eşleşmezse ya da istemci SNI göndermezse bağlantı kapatılır. |
| HTTP/3 | Listesi dolu vService'te HTTP/3 rozetli protokoller sunulmaz. |
SNI/Host Validation ile Birlikte Kullanım
Virtual Hosting'de vService seçimi bağlantının başındaki SNI'ye göre yapılır. Bir wildcard sertifika (*.example.com) birden fazla vService'in alan adını kapsıyorsa, tarayıcı bir alan adı için açtığı HTTP/2 bağlantısını aynı sertifikayı kapsayan başka bir alan adı için de kullanabilir (connection coalescing). Bu durumda ikinci alan adının isteği, ilk bağlantının ulaştığı vService'e gider.
Bunu önlemek için vService'lerin SSL Security alanında seçilen TLS Security Profile'da SNI/Host Validation açılır (Certificates & PKI → TLS Security Profiles → profil → Frontend-only Settings; varsayılan kapalıdır). Açıkken TLS'teki SNI ile isteğin Host Header'ı karşılaştırılır (port ve büyük/küçük harf dikkate alınmaz); uyuşmazsa istek 421 Misdirected Request ile reddedilir ve tarayıcı doğru alan adı için yeni bir bağlantı açar. Ayar yalnızca HTTP vService'lerde etkilidir; istemci SNI göndermemişse karşılaştırma yapılmaz. Ayrıntı: SNI ile Host Header'ı uyuşmayan istekleri (domain fronting) reddedebilir miyim (SNI/Host Validation)?
TR7'de
- vService formunda Virtual Hosting anahtarı açılır ve alan adları listeye yazılır; anahtar kapatıldığında liste boşaltılır.
- Virtual Hosting tanımlı vService'ler listede Type hücresindeki bulut simgesiyle görünür; simgenin üzerine gelindiğinde alan adları listelenir.
Sık Karıştırılan Noktalar
- "Virtual Hosting ile Content Switching aynı şeydir." Virtual Hosting ayrı vService'ler arasında seçim yapar; Conditional Backend Services (Content Switching) tek bir vService'in içinde, condition'lara göre farklı Kurum Servisleri seçer.
- "Alan adına bakan katman TLS'i açar." HTTPS'te yalnızca SNI okunur; TLS'i seçilen vService kendi sertifikasıyla sonlandırır.
- "Eşleşmeyen istekler varsayılan bir siteye gider." Varsayılan (catch-all) site seçeneği yoktur; eşleşmeyen istek 503 alır ya da bağlantısı kapanır.
- "En özel eşleşme kazanır." Aynı alan adıyla eşleşen iki vService varsa TR7 tam eşleşmeye öncelik vermez: Wildcard alan adıyla (*.example.com) Virtual Hosting yapabilir miyim?
Dokümantasyonda nasıl yapılır
İlgili sorular
- Tek bir public IP'nin arkasında birden fazla web sitesi yayınlayabilir miyim?
- Wildcard alan adıyla (*.example.com) Virtual Hosting yapabilir miyim?
- Virtual Hosting'de hiçbir host'a uymayan istek nereye gider?
- SNI ile Host Header'ı uyuşmayan istekleri (domain fronting) reddedebilir miyim (SNI/Host Validation)?
