Apache HTTP Sunucusu Sürüm 2.4
Bu sayfanın konusu şöyle özetlenebilirdi: Yapılandırma dosyalarınızda DNS sorguları yapılmasını gerektirecek ayarlamalardan kaçınınız. Eğer yapılandırma dosyalarınızda DNS sorgusu yapılarak çözümlenebilecek adresler bulunursa sunucunuz beklenmedik davranışlar (hiç başlamayabilir) gösterebileceği gibi hizmet reddi veya hizmet hırsızlığı (bazı sanal konakların diğerlerine giden sayfaları çalma olasılığı dahil) saldırılarına açık hale gelebilir.
# Bu yetersiz bir yapılandırma örneğidir, sunucunuzda kullanmayın. <VirtualHost falan.fesmekan.dom> ServerAdmin filanca@fesmekan.dom DocumentRoot /siteler/fesmekan </VirtualHost>
httpd’nin beklendiği gibi işlemesi için her sanal konak için iki
veriye mutlaka ihtiyacı vardır: ServerName
ve sunucunun bağlantı kabul edip hizmet
sunacağı en az bir IP adresi. Yukarıdaki örnekte IP adresi
bulunmamaktadır, dolayısıyla Apache, falan.fesmekan.dom
adresi için bir DNS sorgusu yapmak zorundadır. Eğer sunucu,
yapılandırma dosyasını çözümlediği sırada bir sebeple DNS sunucusuna
erişemezse bu sanal konak yapılandırılmayacak ve bu sanal konağa
yapılan isteklere yanıt verilemeyecektir.
falan.fesmekan.dom
’un 192.168.2.1 IP adresine sahip
olduğunu varsayarsak yapılandırma şöyle olurdu:
# Bu yetersiz bir yapılandırma örneğidir, sunucunuzda kullanmayın. <VirtualHost 192.168.2.1> ServerAdmin filanca@fesmekan.dom DocumentRoot /siteler/fesmekan </VirtualHost>
Ancak, bu sefer de bu sanal konağın sunucu ismini öğrenmek için httpd’nin bir ters DNS sorgusu yapması gerekecektir. Eğer bu sorgu başarısız olursa kısmi bir yapılandırmaya gidilir. Eğer sanal konak isme dayalı ise sanal konak kısmen bile yapılandırılmaz. IP’ye dayalı sanal konaklar büyük oranda çalışır, fakat (örneğin, bir Redirect varlığında olduğu gibi) sunucu ismini içeren tam bir adres üretilmesini gerektiren bir durumda, sunucu geçerli bir adres üretemez.
Her iki sorunu da çözen yapılandırma şöyle olurdu:
<VirtualHost 192.168.2.1> ServerName falan.fesmekan.dom ServerAdmin filanca@fesmekan.dom DocumentRoot /siteler/fesmekan </VirtualHost>
Şöyle bir yapılandırmanız olsun:
<VirtualHost falan.fesmekan.dom> ServerAdmin filanca@fesmekan.dom DocumentRoot /siteler/fesmekan </VirtualHost> <VirtualHost misal.mesela.dom> ServerAdmin falanca@mesela.dom DocumentRoot /siteler/mesela </VirtualHost>
falan.fesmekan.dom
’a 192.168.2.1,
misal.mesela.dom
’a 192.168.2.2 atadığınızı fakat,
mesela.dom
’un DNS kaydının sizin denetiminizde olmadığını
varsayalım. Bu yapılandırmayla, mesela.dom
’u
fesmekan.dom
’a giden tüm trafiği çalabilecek duruma
getirirsiniz. Bunu gerçekleştirmek için DNS kaydında
misal.mesela.dom
’a 192.168.2.1 adresinin atanması
yeterlidir. Kendi DNS’lerine sahip olduklarından dolayı
misal.mesela.dom
’a istedikleri IP adresini atamaktan
onları alıkoyamazsınız.
192.168.2.1’e gelen isteklerin hepsine
(http://falan.fesmekan.dom/biryer
şeklinde yazılan
adresler dahil) mesela.dom
sanal konağınca hizmet
sunulacaktır. Apache’nin gelen istekleri sunduğu sanal konaklarla nasıl
eşleştirdiğini bilirseniz bunun sebebini kolayca anlarsınız. Bunu
kabataslak açıklayan bir belgemiz
mevcuttur.
İsme dayalı sanal konak
desteği, httpd’nin çalıştığı makinenin IP adres(ler)ini de bilmesini
gerektirir. Bu adresi elde etmek için sunucu, ya sunucu genelinde geçerli
ServerName
yönergesine bakar ya da bir
C işlevi olan gethostname
’i kullanır (işlev, komut
isteminden hostname
komutuna dönen yanıtın aynısını
döndürür) ve ardından bu adresle ilgili olarak bir DNS sorgusu yapar.
Bu sorgudan kaçınmanın henüz bir yolu yoktur.
Eğer bu sorgunun (DNS sunucusunun çökmüş olması gibi bir nedenle)
başarısız olabileceğinden korkuyorsanız, makine ismini ve IP adresini
/etc/hosts
dosyanıza yazabilirsiniz (Makinenizin düzgün
olarak açılabilmesi için zaten bu kaydı yapmış olmanız gerekir).
Kullandığınız işletim sistemine bağlı olarak bu kaydın
/etc/resolv.conf
veya /etc/nsswitch.conf
dosyasında bulunması gerekebilir.
Herhangi bir nedenle sunucunuz bir DNS sorgusu yapmıyorsa veya
yapmamalıysa, httpd’yi HOSTRESORDER
ortam değişkenine
"local
" değerini atadıktan sonra çalıştırabilirsiniz. Bu
tamamen işletim sistemine ve kullandığınız çözümleyici kütüphanelere
bağlıdır. Ayrıca, ortamı denetlemek için mod_env
kullanmıyorsanız, CGI’ler de bundan etkilenir. En iyisi işletim
sisteminizin SSS belgelerini ve kılavuz sayfalarını okumaktır.
VirtualHost
yönergelerinizde
IP adresleri kullanınız.Listen
yönergelerinizde
IP adresleri kullanınız.ServerName
yönergesi olsun.<VirtualHost
_default_:*>
sanal konağınız olsun.