Apache HTTP Sunucusu Sürüm 2.4

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

# İsme Dayalı Sanal Konaklar

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

## İ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, 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.

## Sunucu isme dayalı sanal konaklardan uygun olanını nasıl seçer

İ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.

### Bir IP adresi ve port çifti için öntanımlı isme dayalı sankon

`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.

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

İlgili Modüller | İlgili Yönergeler
--- | ---
`core` | `DocumentRoot` `ServerAlias` `ServerName` `<VirtualHost>`

İ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.

### Ana konağı unutmayın

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.

### ServerName miras alma

İ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 `httpd.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.