Apache HTTP Sunucusu Sürüm 2.4
Bu belgede isme dayalı sanal konakların ne zaman, nasıl kullanılacakları açıklanmıştır.
IP’ye dayalı sanal konaklarda sunulacak sanal konağı doğru tespit edebilmek için bağlantının yapıldığı IP adresine bakılır. Bu bakımdan her konak için ayrı bir IP adresine gereksinim vardır.
İsme dayalı sanal konaklarda ise sunucu, istemcinin HTTP başlığının bir parçası olarak gönderdiği konak adını kullanır. Bu teknikte aynı IP adresini çok sayıda farklı konak kullanabilir.
İsme dayalı sanal barındırma nispeten daha kolaydır, çünkü her konak ismini doğru IP adresiyle eşlemek için DNS sunucunuzu yapılandırdıktan sonra Apache HTTP sunucusunu farklı konak isimlerini tanıyacak şekilde yapılandırmanız yeterli olur. İsme dayalı sanal barındırma ayrıca zaten kıt olan IP adreslerine talebi de azaltır. Bu nedenle, IP’ye dayalı sanal konakları kullanmanızı gerektiren donanım kullanmadıkça isme dayalı sanal konaklar kullanmalısınız. İstemci uyumuna bağlı IP’ye dayalı sanal barındırma için eskiden varolan sebepler genel amaçlı bir HTTP sunucusu için artık uygulanabilir değildir.
İsme dayalı sanal barındırma, IP'ye dayalı sanal barındırma seçim algoritmasını kullanmaz, yani uygun sunucu ismini arama işlemi sadece en iyi IP'ye dayalı adrese sahip sanal konaklar arasında gerçekleşir.
İsme dayalı sanal konak çözümlemesinin ilk adımının IP'ye dayalı
çözümleme olduğunun anlaşılması çok önemlidir. İsme dayalı sanal konak
çözümlemesi en uygun isme dayalı sanal konağı seçerken önce en iyi IP'ye
dayalı eşleşme adaylarının sayısını azaltır, sonra bunlar arasından en
uygununu seçer. Tüm VirtualHost
yönergelerinde IP adresi
yerine joker kullanımı bu IP'ye dayalı eşlemeyi yersiz kılar.
Bir istek geldiğinde, sunucu, istekte kullanılan IP adresi ve portu ile
en iyi eşleşen <VirtualHost>
bileşenini bulur. Bu IP adresi ve port çifti ile
eşleşen birden fazla sanal konak varsa, Apache httpd istekte kullanılan
sunucu ismini ServerName
ve
ServerAlias
yönergelerindeki
isimlerle karşılaştırır.
Herhangi bir isme dayalı sanal konakta ServerName
yönergesini kullanmazsanız, sunucu
bu yönergeye sistem konak adından türetilmiş tam nitelenmiş alan adının
(FQDN) tanımlandığını varsayacaktır. Bu örtük atama sezgiselliğin
istenmediği bir sanal konak eşleşmesi ile sonuçlanabilir ve bu
önerilmez.
ServerName
ve
ServerAlias
yönergelerinde bir
eşleşme bulunamazsa, Apache httpd bu çift ile eşleşen sanal
konaklar listesindeki ilk sanal konağı kullanır.
İlgili Modüller | İlgili Yönergeler |
---|---|
İlk adım sunacağınız her konak için ayrı bir <VirtualHost>
bölümü oluşturmaktır. Her
<VirtualHost>
bölümü
içinde sunulan konağı belirtmek üzere en azından bir adet ServerName
yönergesine ve konak içeriğinin
dosya sisteminde bulunduğu yeri gösteren bir DocumentRoot
yönergesine ihtiyacınız
olacaktır.
Mevcut <VirtualHost>
yönergelerinin hiçbiriyle eşleşmeyen bir istek için, sunucu veya konak
ismine bakılmaksızın genel sunucu yapılandırmanız kullanılır.
Mevcut sitenize isme dayalı bir sanal konak eklerseniz ve bu sanal
konak ana sunucunun IP adresi ve portuna sahipse, ana sunucuya yapılan
istekler için bu sanal konak kullanılır. Bu bakımdan, ServerName
yönergesi ana sunucununki ile aynı
olan bir öntanımlı sanal konak oluşturmak
akıllıca olacaktır. Aynı arayüz ve portu kullanan fakat farklı
yapılandırmalara sahip diğer alan isimlerinin sanal konakları (yani
öntanımlı olmayanlar) bu öntanımlı sanal konağın sonrasına
yerleştirilmelidir.
İsme dayalı her sanal konak için daima bir ServerName
belirtmek en iyisidir.
Eğer bir VirtualHost
bölümü
içinde bir ServerName
belirtilmezse, sunucu ismi olarak ana sunucu yapılandırmasındaki isim
kullanılır. Orada da bir sunucu ismi belirtilmemişse, başlatma sırasında
dinlenen ilk IP adresinden ters DNS araması ile elde edilen isim
kullanılır. Her iki durumda da miras alınan isim gereksiz yere isme
dayalı sanal konak ismi haline gelecektir; bu bakımdan isme dayalı her
sanal konak için daima bir ServerName
belirtmek en iyisidir.
Örnek olarak, site1.example.com
adresinden sitenizi
sunmakta olduğunuzu ve bunun yanına aynı IP adresini kullanan
site2.example.com
sanal konağını eklemek istediğinizi
varsayalım. Bunun için apache2.conf
dosyanıza basitçe şu
satırları ekleyebilirsiniz:
<VirtualHost *:80> #İlk sanal konak aynı zamanda *:80 için de öntanımlıdır. ServerName site1.example.com ServerAlias example.com DocumentRoot "/siteler/site1" </VirtualHost> <VirtualHost *:80> ServerName site2.example.com DocumentRoot "/siteler/site2" </VirtualHost>
İsterseniz, <VirtualHost>
yönergesinde argüman olarak *
yerine doğrudan bir IP adresi belirtebilirsiniz. Hatta, daha sonra, isme
dayalı sanal konakları bir IP adresinden ve IP’ye dayalı olanları veya
isme dayalı diğer bir sanal konak grubunu diğer IP adreslerinden sunmak
isteyebilirsiniz.
Çoğu sunucunun birden fazla isim ile erişilebilir olması istenir. Bu,
<VirtualHost>
bölümü
içine bir ServerAlias
yönergesi
yerleştirmek suretiyle mümkün olur. Örneğin yukarıdaki örnekte,
kullanıcıların aynı siteye farklı isimlerle erişmelerini mümkün kılmak
için bölüm içine şu satırı ekleyebilirsiniz:
ServerAlias example.com *.example.com
Böylece example.com
alanındaki tüm konaklar için gelen
isteklere www.example.com
sanal konağından hizmet sunulmuş
olur. Konak isimleriyle eşleşmek üzere dosya ismi kalıp karakterleri
*
ve ?
kullanılabilir. Şüphesiz bu isimleri
sırf ServerName
veya
ServerAlias
yönergesinde belirtmiş olmakla bu isimleri
erişilebilir kılamazsınız. Öncelikle, bu isimleri sunucunuzdaki IP
adresleriyle eşlemek üzere yapılandıracağınız bir DNS sunucunuz
olmalıdır.
İsme dayalı sanal konaklardan en iyi eşleşme kümesinde olanlar
yapılandırmada göründükleri sıraya göre işleme sokulur. Joker
kullanımları arasında fark gözetilmeksizin ServerName
veya ServerAlias
yönergesi eşleşen ilk sanal konak
kullanılır.
VirtualHost
içindeki isimlerin sırası (jokersiz) bir
ServerAlias
gibi ele alınır (fakat hiçbir
ServerAlias
yönergesi ile geçersiz kılınmaz).
Son olarak, sanal konak yapılandırmanıza, <VirtualHost>
bölümlerinin içine başka yönergeler
yerleştirerek ince ayar çekebilirsiniz. Çoğu yönerge bu bölümlere
yerleştirilebilir ve sadece o sanal konakla ilgili yapılandırmayı
değiştirmek için kullanılabilir. Belli bir yönergenin sanal konak
bölümlerinde kullanılıp kullanılmayacağını yönergenin açıklamasında Bağlam satırına bakarak
öğrenebilirsiniz. Ana sunucu bağlamındaki (<VirtualHost>
bölümleri dışındaki)
yapılandırma yönergelerinden sadece sanal konak bölümlerinde geçersiz
kılınmamış olanlar kullanılacaktır.