Apache HTTP Sunucusu Sürüm 2.2

Apache > HTTP Sunucusu > Belgeleme > Sürüm 2.2 > Sanal Konaklar

# İsme Dayalı Sanal Konaklar

Mevcut Diller: de | en | fr | ja | ko | tr

Bu belgede isme dayalı sanal konakların ne zaman, nasıl kullanılacakları açıklanmıştır.

### Ayrıca bakınız:

- IP Adresine Dayalı Sanal Konaklar
- Konak Eşlemenin Derinliğine İncelenmesi
- Devingen olarak Yapılandırılan Kütlesel Sanal Barındırma
- Çok kullanılan sanal konak yapılandırma örnekleri
- ServerPath yapılandırma örneği

## İsme dayalı ve IP’ye dayalı Sanal Konaklar

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, açıkça IP’ye dayalı sanal konakları talep eden donanım kullanmadıkça isme dayalı sanal konaklar kullanmalısınız. SNI desteksiz bir `mod_ssl` sürümü (Apache'nin 2.2.12 sürümüne kadar standart) kullanmıyorsanız, istemci desteğine bağlı IP’ye dayalı sanal konaklar için geçerli tarihsel sebepler, genel amaçlı bir HTTP sunucusu için artık uygulanabilir değildir.

## İsme Dayalı Sanal Konakların Kullanımı

İlgili Modüller | İlgili Yönergeler
--- | ---

- `core`

- `DocumentRoot`
- `NameVirtualHost`
- `ServerAlias`
- `ServerName`
- `ServerPath`
- `<VirtualHost>`

İsme dayalı sanal konakları kullanmak için, bu konaklar için istekleri kabul edecek sunucuya IP adresini (ve muhtemelen portu da) belirtmelisiniz. Bu işlem `NameVirtualHost` yönergesiyle yapılır. Normal şartlar altında sunucu üzerinde bütün IP adreslerinin kullanılması gerekir; bunun için `NameVirtualHost` yönergesine argüman olarak `*` belirtebilirsiniz. Çok sayıda port kullanmayı planlıyorsanız (SSL çalıştırmak gibi), argümana `*:80` şeklinde port ekleyebilirsiniz. Yalnız, `NameVirtualHost` yönergesinde bir IP adresi belirtmiş olmakla sunucunun kendiliğinden o IP adresini dinlemeyeceğine dikkat ediniz. Bu konuda ayrıntılı bilgi edinmek için Apache’nin kullanacağı adreslerin ve portların ayarlanması belgesine bakınız. Ayrıca, sunucuda, burada belirttiğiniz IP adresine sahip bir ağ arabirimi olmalıdır.

Sonraki adım sunacağınız her konak için ayrı bir `<VirtualHost>` bölümü oluşturmaktır. `<VirtualHost>` yönergesinin argümanı ile eşleşen bir `NameVirtualHost` yönergesi tanımlanmış olmalıdır (değer normalde "*:80" olacaktı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.

### Ana konağı unutmayın

Mevcut sitenize sanal konaklar eklerseniz, mevcut siteniz için de bir `<VirtualHost>` bölümü oluşturmalısınız. Bu sanal konak bölümü içinde kullanacağınız `ServerName` ve `DocumentRoot` yönergelerinin argümanları, bu yönergelerin sunucu geneli için belirttiğiniz değerlerini içermelidir. Bu sanal konağı yapılandırma dosyanızdaki ilk sanal konak yapın ki, öntanımlı konak olsun.

Örnek olarak, `www.biralan.tld` adresinden sitenizi sunmakta olduğunuzu ve bunun yanına aynı IP adresini kullanan `www.digeralan.tld` sanal konağını eklemek istediğinizi varsayalım. Bunun için `httpd.conf` dosyanıza basitçe şu satırları ekleyebilirsiniz:

`NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.biralan.tld
ServerAlias biralan.tld *.biralan.tld
DocumentRoot /siteler/biralan
</VirtualHost>
<VirtualHost *:80>
ServerName www.digeralan.tld
DocumentRoot /siteler/digeralan
</VirtualHost>
`

İsterseniz, `NameVirtualHost` ve `<VirtualHost>` yönergelerinde 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 biralan.tld *.biralan.tld`

Böylece `biralan.tld` alanındaki tüm konaklar için gelen isteklere `www.biralan.tld` 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.

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.

Sunucuya bir istek geldiğinde, sunucu önce IP adresiyle eşleşmesi olası `NameVirtualHost` bölümleri var mı diye bakar. Varsa, IP adresini eşleştirmek için `NameVirtualHost` bölümlerine tek tek bakar ve istenen konak ismi ile eşleşen bir `ServerName` veya `ServerAlias` yönergesi bulmaya çalışır. Bir tane bulduğunda, sunucu için onun yapılandırmasını kullanır. İsimle eşleşen bir sanal konak bulamazsa IP adresiyle eşleşen ilk sanal konağın yapılandırmasını kullanır.

Bir önkabul olarak yapılandırma dosyasında rastlanan ilk sanal konak öntanımlı sanal konaktır. IP adresi bir sanal konakla eşleştiği takdirde ana sunucunun `DocumentRoot` değeri asla kullanılmayacaktır. Sanal konaklardan hiçbiriyle eşleşmeyen istekler için özel bir yapılandırmanız olsun isterseniz, bu yapılandırmayı yapılandırma dosyanızdaki ilk `<VirtualHost>` bölümüne yerleştirmeniz yetecektir.

## Artık Tarihe Karışmış Tarayıcılarla Uyumluluk

Evvelce de bahsedildiği gibi, isme dayalı sanal konakların gerektiği gibi çalışması için gerekli veriyi göndermeyen bazı istemciler vardır. Bu istemcilere daima o IP adresinin yapılandırma dosyasındaki ilk sanal konağının (isme dayalı başat sanal konak) sayfaları gönderilir.

### Ne kadar eski?

Lütfen dikkat edin, eski deyince gerçekten de antika demek istiyoruz. Günümüzde bu tür tarayıcılara rastlamanız neredeyse imkansızdır. Günümüz tarayıcılarının hepsi isme dayalı sanal konakların gerektirdiği `Host` başlığını gönderirler.

Olayı fazla germeden `ServerPath` yönergesini kullanarak sorunun çevresinden dolanmak mümkündür:

Örnek yapılandırma:

`NameVirtualHost 111.22.33.44
<VirtualHost 111.22.33.44>
ServerName www.biralan.tld
ServerPath /biralan
DocumentRoot /siteler/biralan
</VirtualHost>
`

Bu ne anlama geliyor? Anlamı, "`/biralan`" ile başlayan her URI isteği `www.biralan.tld` sanal konağı tarafından sunulacak, demektir. Yani, tüm istemcilerin `http://www.biralan.tld/biralan/` olarak eriştiği yere `Host:` başlığı gönderen istemciler `http://www.biralan.tld/` olarak erişirler.

Bunu gerçekleştirebilmek için başat sanal konağın baş sayfasına `http://www.biralan.tld/biralan/` için bir bağ koyduktan sonra sanal konağın sayfalarında ya tamamen göreli bağlar ("`dosya.html`", "`../simgeler/resim.png`" gibi) veya `/biralan/` ile öncelenmiş bağlar ("`http://www.biralan.tld/biralan/muht/dosya.html`" veya "`/biralan/muht/dosya.html`" gibi) kullanın.

Bu işlem biraz disiplin gerektirse de bu yazılanlara sıkı sıkıya bağlı kalarak hem eski hem de yeni tarayıcıların sayfalarınızı doğru görüntülemesini sağlamış olursunuz.

Mevcut Diller: de | en | fr | ja | ko | tr