CookingTheCode.COM

Virtual Host Kurulumu

02 Ocak 2010Cumartesi15:04Yorum: 0
Kategori: İşletim Sistemleri Sunucu Tarafı

Virtualhost nedir?

Bir sunucu üzerinde birden fazla alanadının barındırılmasını sağlayan mekanizmanıdır.

İki türe ayrılır, ip tabanlı sanal barındırmalar, isim(alanadı) tabanlı barındırmalar.

IP tabanlı sanal barındırma ile tek bir sunucudaki farklı barındırmalar, IP adreslerine göre ayrılırlar. Kısaca; "bu ip ise bu barındırmayı, şu ip ise bu barındırmayı algıla" prensibi ile çalışır.

  • Tahmin edileceği gibi bu yötem için birden fazla IP adresi gerekmektedir.
  • Tarayıcıya(istemciye) bağlı kalmaksızın sunucunun doğru çalışması, sunucu programının barındırma hesaplarını karıştırmasının önüne geçilmiş olunur.


Alanadı tabanlı yöntem ise HTTP1.1 protokolünün tarayıcı(istemciler) tarafından desteklenemsini zorunlu kılar. HTTP1.1 destekleyen bir tarayıcı bir alanadına istek yaparken, http istek başlıkları(http request headers) ile hangi alanadına istek yaptığını http sunucusuna bildirir. Sunucu ise bu bilgiye göre hangi barındırmanın kastedildiğini anlar.

  • Ek bir IP adresine gerek yoktur.
  • Tarayıcıların http istek başlıkları içersinde "HOST: alanadı.com" satırını da göndermesi, yani HTTP1.1 protokolünün desteklenesi gereklidir.
  • neredeyse günümüzdeki tüm tarayıcılar gerekli protokülü desteklediği için alanadı bazlı yöntem tercih edilmelidir.


Alanadı Bazlı Sanal Barındırma (name-based)

Alanadı bazlı yötemde, apache sunucusunun "virtualhost" ayar dosyası içinde, her barındırma/alandı için "" bloğu oluşturulmalıdır. Her blok bir alanadına özel yönergeleri içerir.

Bu blok içersinden çeşitli yönergeler yazılabilir, ama en az iki tane yönerge olmalıdır: 'servername' ve 'documentroot' yönergeleri.

servername, hangi alanadının kastedildiğini; documentroot ise bu alanadına ait dosyaların nerede tutulduğunu belirtir.

En basit çalışır bir sanal barındırma tanımlaması şöyle olabilir:
<virtualhost *:80>
  servername alanadi.com
  documentroot "/var/www/alanadi.com/htdocs"
</virtualhost>

Burda, virtualhost ifadesinden sonra gelene *(yıldız), ip adresini belirtir. Biz burada hangi ip adresinden geldiği farketmeksizin bu bloğu işle demiş olduk. ":80" ise hangi portdan gelince bu bloğun işleneceğini belirtir. Biz, ön tanımlı olan, yani 80 dedik.

virtualhost içinde serveralias, errorlog, serveradmin gibi ve daha bir çok yönerge yazılabilir.

Örnek virtualhost tanımlaması
Şöyle bir senaryomuz olsun:

  • Siz bir geliştiricisiniz ve bir bilgisayarı geliştirme ortamı haline getirmek istiyorsunuz.Apache ve diğer uygulamalar kurulmuş halde olsun. Apache, /usr/apache dizininde kuruluymuş gibi kabul edelim.
  • Birden fazla proje üzerinde çalışıyorsunuz. İlk projeye projem1.com, ikincisine projem2.com, son projeye de projem3.com diye çağıralım.
  • Tüm projeler /var/www dizini altında, kendi ismiyle aynı olan bir dizinin içinde saklanıyor olsun. Yani; /var/www/projem1.com, /var/www/projem2.com, /var/www/projem3.com


Bu senaryoya göre sanal barındırma tanımlamaları yapalım.

documentroot'u değiştirmek

Öncelikle apache'nin genel ayar dosyasını(örneğimize göre /usr/apache/conf/httpd.conf dosyasıdır) açın. Şuna benzer bir blog ve bloğa ait yönergeler bulacaksınız:

"# This should be changed to whatever you set DocumentRoot to.
<Directory "/usr/apache/httpdocs"> "

Burdaki "/usr/apache/httpdocs" ifadesini örneğimize göre "/var/www" ile değiştirin.

virtualhost'u aktif hale getirmek

Yine aynı dosya içinde şöyle bir satır bulacaksınız:
#Include conf/extra/httpd-vhosts.conf
Bu satırın başındaki # karakterini silerseniz bu satır apache tarafından dikkate alınır, yani virtualhost aktif hale gelir. Ayrıca farketmiş olduğunuz gibi virtualhost tanımlamalarının hangi dosyada yapılacağı bu satır ile belirtilmiştir.

virtualhost tanımlamak

Şimdi /usr/apache/conf/extra/httpd-vhosts.conf dosyasını açın ve içindeki her şeyi silin, tertemiz olsun.

Şimdi her proje için bir virtualhost bloğu yazacağız. En basit haliyle öyle olmalıdır.

NameVirtualHost *:80
<virtualHost *:80>
servername projem1.com
documentroot "/var/www/projem1.com"
</virtualhost>
<virtualHost *:80>
servername projem2.com
documentroot "/var/www/projem2.com"
</virtualhost>
<virtualHost *:80>
servername projem3.com
documentroot "/var/www/projem3.com"
</virtualhost>

Bunları yazdıktan sonra dosyayı kaydedip kapatın. Şimdi ise bu adresler tarayıcı tarafından çağrıldığında kendi bilgisayarımızda aramasını sağlayacağız.

hosts dosyası ile adresleri yönlendirme

/etc/hosts dosyasını açın ve şu satırı ekleyin:
127.0.0.1  projem1.com projem2.com projem3.com

Bu satır, projem1.com ve diğer alanadlarının 127.0.0.1 ip adrseli makinalarda saklı olduğunu söyler.

Dns önbelleğini temizlemek

Şu komut ile önbelleğe alınmış adres, ip adresi ikililerini temizleyin.
/etc/init.d/networking restart

Apache sunucusunu yeniden başlatın. Artık tarayıcıya projem1.com yazdığınızda /var/www/projem1.com adresinin içeriği sunulacaktır.
/etc/init.d/networking restart

Umarım işinize yaramıştır.

Yorum Formu, ne düşünüyorsan yaz!
  • Bu da ne?
  • Gönderiliyor

Yazan: Mustafa Atik
mustafaatik.com