İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır
Erkan Doğan
erkdogan@hotmail.com

Apache'de Virtual Hosting

Virtual Hosting Nedir ?

Apache web sunucusunda Virtual Hosting , Tek bir Apache web sunucusu üzerinden birden fazla domain ( web alanı ) için hizmet vermek amacı ile kullanılır . Bu dökümanda isme göre ( Name -based ) virtual hosting konfigurasyon yapılacaktır . Tüm web alanları için web sunucusunda tek bir ip adresi kullanılacaktır . IP ye göre ( IP -based ) konfigurasyonda yapılar ama bunun için her web alanını ( domain ) için ayrı ayrı ip adresi tanımlanmalıdır . Bu durumda isme göre konfigurasyon yapmak daha mantıklıdır ( en azından ben öyle düşünüyorum :)) ).

Virtual Hosting Konfigurasyonu

İlk önce Apache web sunucusunu kurmuş olmanız gerekiyor !! eğer apache yi kurmadıysanız http://apache.bilkent.edu.tr/ adresinden apache nin en son sürümünü indiriniz . Apache derlemek için aşağıdaki komutları sıra ile veriniz .

# tar -zxvf apache_1.3.12.tar.gz 
# cd apache_1.3.12 
# mkdir /www 
# ./configure --prefix=/www  && make && make install

--prefix=/www ifadesi ile apache ile ilgili tüm dosyalar /www dizini altına atılacaktır . Bu parametreyi vermezseniz ön tanımlı olarak /usr/local/apache dizini altına atılacaktır.

Apache sunucusunu başlatmak için

# /www/bin/apachectl start

komutunu vermeniz yeterlidir . daha sonra sevdiginiz bir editörde httpd.conf dosyasını açınız .

# vi /www/conf/httpd.conf 

Diyelimki www.x.org.tr , www.y.net.tr , www.z.org için virtual hosting yapacağız . ilk önce tüm bu alanlar ( domain ) için dns kaydı yapılması lazım ve dns sunucuda bu alanların ip adresi olarak apache web suncusunun ip adresi verilmelidir . Burada apache web sunucusun ip adresi olarak 195.1.2.4 verilecektir .

Sırası ile x.org.tr , www.z.org için Virtual Hosting bilgilerini yazalım .

NameVirtualHost 195.1.2.4:80   

# www.x.org.tr  

<VirtualHost 195.1.2.4> 
ServerAdmin root@y.net.tr 
DocumentRoot /www/htdocs/domains/x 
ServerName www.lx.org.tr 
ErrorLog logs/error_x.org.tr 
TransferLog logs/access_log_x.org.tr 
</VirtualHost> 

# www.z.org  

<VirtualHost 195.1.2.4> 
ServerAdmin root@y.net.tr 
DocumentRoot /www/htdocs/domains/z 
ServerName www.z.org 
ErrorLog logs/error_z 
TransferLog logs/access_log_z 
</VirtualHost> 

Şimdi Yukarıdaki ifadelerin ne demek oldugun açıklayalım .

NameVirtualHost  195.1.2.4:80 

İfadesindeki 195.1.2.4 Apache web sunucusunun ip adresi ( IP Gerçek değil Oylesine bir IP verdim ) ve 80 ile de httpd port u belirtilmiştir .

# ile başlayan kısımlar sadece açıklama kısmıdır olup olmaması konfigurasyonu etkilemez .

<VirtualHost 195.1.2.4>

Bu kısımdaki ip adresi web sunucusunun ip adresi olmalı ServerAdmin ifadesi root@x.net.tr ifadesi ile Bu web alanının yetkili kişisinin e-mail adresini belirtir .

DocumentRoot  /www/htdocs/domains/x 

İfadesi ile www.x.org.tr adresinin dosyalarının bulundugu yeri belirttik .

ServerName  www.x.org.tr 

Adından da anlaşılacağı gibi Web alanın adı belirtildi .

ErrorLog logs/error_x.org.tr 

Bu ifade ilede bu web alanındaki hatalar ( dosyaların bulunamaması , CGI hataları ) logs dizini altindaki ( bizim kurulumda /www/logs ) error_y.net.tr dosyasına yazılır .

TransferLog  logs/access_log_x.org.tr 

Bu ifade ilede bu web alanına hangi ip lerden erişildiği hangi dosyalara bakıldığı gibi bilgilerin logs dizini altindaki ( bizim kurulumda /www/logs ) access_log.x.org.tr dosyasına yazılacağını belirtir .

</VirtulHost> 

ifadesi ile Bu alan için gerekli konfigurasyonun bittiğini belirttik .

Evet Virtual Hosting mizin sonuna geldik sayılır ama bir sorun var !!!

Bizim Apache Sunucumuzun IP adresi 195.1.2.4 idi . Diyelimki bu IP www.y.net.tr isimli makinaya ait ve bu adress Y.NET web sunucu .

Şu anki konfigurasyonla http://www.y.net.tr adresine girmek isteyen birisi www.y.net.tr yerine httpd.conf dosyasında en üstte bulunan web alanına gidecektir .Yani www.x.org.tr adresine erişecektir .

Bu sorunu çözmek için www.y.net.tr sunucunun adı olmasına rağmen , bu alan içinde Virtual Hosting kaydı yapılmalıdır .

Aşagıdaki ifadeler yazılırsa bu sorun giderilmiş olur .

# www.y.net.tr  

<VirtualHost 195.1.2.4> 
ServerAdmin root@y.net.tr 
DocumentRoot /www/htdocs 
ServerName www.y.net.tr 
ErrorLog logs/error_y.net.tr 
TransferLog logs/access_log_y.net.tr 
</VirtualHost> 

En son olarak

# /www/bin/apachectl restart 

komutu ile değişiklikler aktif hale getirilir . eğer daha onceden apache yi kurmuşsanız ( RedHat da )

# /etc/rc.d/init.d/httpd restart 

komutu ile değişikliği aktif edebilirsiniz .

Bu komut httpd.conf da yapılan her değişiklikten sonra çalıştırılmalıdır yoksa yapılanlar aktif olmaz.! ve apache web sunucusunun her açılışta çalışması için /etc/rc.d/rc.local ( Redhat Linux için ) dosyasinin en sonuna

/www/bin/apachectl start 

Bir SSL virtual host tanımı için SSL destekli bir Apache'nin httpd.conf dosyasına aşağıdaki satırlar eklenmelidir.

VirtualHost www.firma.com.tr:443
DocumentRoot /www/firma
ServerName www.firma.com.tr
ServerAdmin webmaster@firma.com.tr
ErrorLog /usr/local/apache/logs/error_log
TransferLog /usr/local/apache/logs/access_log
SSLEngine on
SSLCertificateFile /usr/local/apache/conf/ssl.crt/server.crt
SSLCertificateKeyFile /usr/local/apache/conf/ssl.key/server.key
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
CustomLog /usr/local/apache/logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
/VirtualHost 

Aynı sunucuda çok fazla sayıda ( 2000-3000 ) web için virtual hosting yapılacaksa, bu tanım şekli yerine rewrite metodunun kullanılması önerilir . Ayrıntılı bilgi , http://www.apache.org/docs/misc/rewriteguide.html adresinden alınabilir .

İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır