From: Takashi Sato
Running apachectl configtest
will give you a list
- of the files that are being processed during the configuration
- check:
- root@host# apachectl configtest
- Processing config file: /usr/local/apache2/conf/ssl.conf
- Processing config file: /usr/local/apache2/conf/vhosts/vhost1.conf
- Processing config file: /usr/local/apache2/conf/vhosts/vhost2.conf
- Syntax OK
-
apachectl
apachectl configtest
ile yapılandırma sınanırken iÅleme
- sokulan dosyalar listelenir:
- root@host# apachectl configtest
- Processing config file: /usr/local/apache2/conf/ssl.conf
- Processing config file: /usr/local/apache2/conf/vhosts/vhost1.conf
- Processing config file: /usr/local/apache2/conf/vhosts/vhost2.conf
- Syntax OK
-
Apache HTTP Sunucusu Sürüm 2.0
+Sanal konak kodu Apache 1.3 sürümünde baÅtan yeniden
+ yazıldı. Bu belgede, bir istek aldıÄında Apacheânin hangi sanal konak
+ ile hizmet sunacaÄına nasıl karar verdiÄi açıklanmaya çalıÅılmıÅtır.
+ NameVirtualHost
yönergesi sayesinde
+ sanal konak yapılandırması 1.3 sürümünün öncesine göre daha kolay ve
+ daha güvenilir hale gelmiÅtir.
Sanal konakların nasıl çalıÅtıÄını öÄrenmeden sadece çalıÅtırmak + isterseniz doÄrudan örneklerin bulunduÄu + sayfaya bakabilirsiniz.
+ +Bu belgede <VirtualHost>
bölümleri dıÅında kalan
+ tanımlardan bahsederken ana_sunucu, <VirtualHost>
bölümlerindeki tanımlamalardan
+ bahsederken sankonlar diyeceÄiz.
Listen
,
+ ServerName
,
+ ServerPath
ve
+ ServerAlias
yönergeleri bir sunucu
+ yapılandırmasının her yerinde karÅımıza çıkabilir. Bununla birlikte,
+ sunucu dahilinde son göründükleri yerlerde önceki eÅdeÄerlerini geçersiz
+ kılarlar.
Listen
yönergesinin ana_sunucu için öntanımlı deÄeri
+ 80âdir. ServerPath
ve ServerAlias
+ yönergelerinin ana_sunucu için öntanımlı deÄerleri yoktur. Ãntanımlı
+ ServerName
deÄeri ise sunucunun IP adresinden elde
+ edilir.
Ana_sunucu Listen
yönergesinin iki iÅlevi vardır. Biri
+ Apacheânin dinleyeceÄi öntanımlı aÄ portunu belirlemek, diÄeri ise
+ yönlendirmeler sırasında mutlak URIâlerde kullanılan port numarasını
+ belirlemektir.
Ana_sunucunun aksine sankonların portları Apacheânin dinleyeceÄi + portlar üzerinde etkili deÄildir.
+ +VirtualHost
yönergesinde görünen her adresin seçimlik bir
+ portu olabilir. EÄer bir port belirtilmemiÅse öntanımlı olarak
+ ana_sunucunun son Listen
yönergesinin deÄeri kullanılır.
+ Port olarak *
belirtildiÄi takdirde bütün portlar dinlenir.
+ Adreslerin tamamını (DNS sorgularındaki çoklu A kayıtları dahil) içeren
+ kümeye sankonların adres kümesi denir.
NameVirtualHost
yönergesi ilk
+ sankonun IP adresi için kullanılmadıÄı takdirde bu IP adresine sahip ilk
+ sankon IPâye dayalı sankon olarak ele alınır. IP adresi olarak
+ *
belirtmek de mümkündür.
EÄer isme dayalı sankonlar kullanılacaksa NameVirtualHost
+ yönergesinin bu isme dayalı sankonların IP adresi kümesini içermesi
+ gerekir. BaÅka bir deyiÅle, yapılandırma dosyanızın
+ NameVirtualHost
yönergesine sankonların sunucu isimlerinin
+ karÅı düÅtüÄü IP adresini yazmalısınız.
Ãok sayıda NameVirtualHost
yönergesi belirtebilirse de her
+ IP:port çifti için birden fazla NameVirtualHost
yönergesi
+ belirtilmemelidir.
AÅaÄıdaki iki örneÄin eÅdeÄer olması için NameVirtualHost
+ ve VirtualHost
yönergelerinin sıralamasının bir önemi
+ yoktur. (Sadece tek adreslik küme içindeki
+ VirtualHost
yönergelerinin sırası önemlidir; aÅaÄıya
+ bakınız:)
|
+
|
+
(Okuma kolaylıÄı bakımından soldaki sürümü tercih etmenizi öneririz.) +
+ +VirtualHost
yönergesi çözümlendikten sonra sankon
+ sunucusuna yönergedeki ilk isme atanmıŠportun öntanımlı olduÄu bir
+ Listen
verilir.
EÄer tüm VirtualHost
isimlerinin listesi aynı adres
+ kümesine çözümleniyorsa bu isimler birer ServerAlias
gibi
+ ele alınırlar (bir ServerAlias
yönergesi ile geçersiz
+ kılınmadıkça). Bir sankon tanımından sonra gelen Listen
+ satırlarının o sankonun adres kümesine atanmıŠportlara bir etkisinin
+ olmayacaÄına dikkat ediniz.
İsim listeleri IP adreslerine göre gruplanır ve bir çiftler tablosuna
+ kaydedilir. EÄer IP adresi bir NameVirtualHost
yönergesinde
+ kullanılmıÅsa, liste bu IP adresi için tanımlanmıŠtüm sankonları
+ içerir. EÄer bu IP adresinin tanımlandıÄı bir sankon yoksa o
+ NameVirtualHost
yönergesi yoksayılır ve günlüÄe bir hata
+ kaydı düÅülür. IPâye dayalı sankonlar için çiftler listesinde isim
+ alanları boÅtur.
Ãiftler listesini iÅleyen iÅlevin hızı nedeniyle bir istek sırasında IP + adresine göre gruplama yaparken kaynak harcaması en düÅük düzeyde olur + hatta neredeyse hiç olmaz. Ek olarak, tablo, IP adresinin son + sekizlisindeki deÄiÅikliklere göre de en iyilenir.
+ +Her sankon için bazı deÄerler öntanımlı olarak atanır. Bunların + baÅlıcaları:
+ +ServerAdmin
+ yönergesi içermiyorsa,
+ ResourceConfig
,
+ AccessConfig
,
+ Timeout
,
+ KeepAliveTimeout
,
+ KeepAlive
,
+ MaxKeepAliveRequests
,
+ ReceiveBufferSize
ve
+ SendBufferSize
yönergeleri için
+ öntanımlı deÄerler ana_sunucudaki eÅdeÄerlerinden miras alınır. (Yani,
+ bu yönergeler için ana_sunucudaki son deÄerler miras alınır.)Esasen, ana_sunucu, sankon sunucularını oluÅtururken bir öntanımlılar + listesi veya öntanımlı deÄerlere dayanak noktası olarak ele alınır. + Fakat bu ana_sunucu tanımlarının yapılandırma dosyasındaki yerlerinin + saptanmasının konumuzla ilgisi yoktur; ana_sunucu yapılandırmasının + tamamı son katıÅtırma yapılacaÄı zaman çözümlenir. Bu bakımdan, + ana_sunucu tanımlarından bir kısmı sankon tanımlarından sonra yer alsa + bile sankon tanımlarında etkili olabilir.
+ +EÄer, bu noktada ana_sunucu hiçbir ServerName
satırı
+ içermiyorsa httpd
programının çalıÅtıÄı makinenin
+ konak ismi öntanımlıdır. Ana_sunucunun ServerName
için
+ yaptıÄı DNS sorgusundan dönen IP adreslerine ana_sunucu adres
+ kümesi diyoruz.
Tanımsız ServerName
alanları için bir isme dayalı sankon, sankonu tanımlayan VirtualHost
yönergesinde belirtilen ilk adresi öntanımlı deÄer kabul eder.
Sihirli _default_
sankonları için ana_sunucunun ServerName
deÄeri kullanılır.
Sunucu bir istek durumunda hangi sankonun kullanılacaÄını Åöyle + belirler:
+ +Bir istemci tarafından baÄlantı ilk yapıldıÄında önce IP-isim çiftleri + tablosunda istemcinin baÄlandıÄı IP adresi için bir arama yapılır.
+ +Arama baÅarısız olursa (IP adresi yoksa) hizmet, istekte belirtilen
+ port için bir _default_
sankon varsa, o sankondan, yoksa
+ ana_sunucudan sunulur.
EÄer çiftler tablosunda IP adresi yoksa port numarası ile eÅleÅtirme
+ çabası ayrıca, diÄer isme dayalı sanal konaklardaki gibi ard arda ele
+ alınmayı gerektiren NameVirtualHost *
durumundaki bir
+ girdiyle sonuçlanabilir.
Arama sonucunda tabloda IP adresi bulunursa sonraki adım hizmetin bir + IPâye dayalı sankondan mı yoksa isme dayalı bir sankondan mı + sunulacaÄına karar vermektir.
+ + + +EÄer tabloda bulduÄumuz girdinin isim alanları boÅsa bir IPâye dayalı + sanal konak bulmuÅuz demektir. Artık karar vermek için baÅka bir Åey + yapmaya gerek yoktur ve istek bu sankondan sunulur.
+ + + +Tabloda bulduÄumuz girdi için bir isim listesi varsa bir isme dayalı
+ sankon sözkonusudur. Bu isim listesi, sankonları, ilgili
+ VirtualHost
bölümlerinin yapılandırma dosyasında yer alıÅ
+ sırasına göre içerir.
Bu listedeki ilk sankon (yapılandırma dosyasında belirtilen IP adresine
+ sahip ilk sankon) en yüksek önceliÄe sahiptir ve sunucu ismi
+ belirtilmeyen veya Host:
baÅlık alanı olmayan istekleri bu
+ sankon karÅılar.
EÄer istemci bir Host:
baÅlık alanı ile istek yapmıÅsa
+ liste bu sankon için aranır ve hizmet ServerName
veya
+ ServerAlias
ile ilk eÅleÅmenin saÄlandıÄı sankondan
+ sunulur. Host:
alanında bir port belirtilebilirse de Apache
+ daima istemcinin isteÄi gönderdiÄi portu gerçek port kabul eder.
EÄer istemci Host:
baÅlık alanı bulunmayan bir HTTP/1.0
+ isteÄi yapmıÅsa istemcinin hangi sankona baÄlanmayı denediÄini bilemeyiz
+ ve istekteki URI ile mevcut ServerPath
deÄerini
+ eÅleÅtirmeye çalıÅırız. Listedekilerden ilk eÅleÅen yola sahip sankondan
+ hizmeti sunarız.
İstekle eÅleÅen bir sankon bulunamazsa IP listesinde istemcinin + baÄlandıÄı portla eÅleÅen ilk sankondan hizmeti sunarız.
+ + + +Yukarıda açıklanan IP araması belli bir TCP/IP oturumunda bir defaya + mahsus yapıldıÄı halde bir kalıcı/KeepAlive baÄlantı sırasında her istek + için ayrı bir arama yapılır. BaÅka bir deyiÅle, bir istemci tek bir + kalıcı baÄlantı üzerinde farklı isme dayalı sankonlardan sayfa talebinde + bulunabilir.
+ + + +EÄer istekte belirtilen URI bir mutlak URI ise ve istek yapılan konak + ismi ve port ana sunucuyla veya sankonlardan biriyle eÅleÅiyorsa, + Åema/konakadı/port öneki ayrılır ve elde edilen göreli URI ilgili + sankondan veya ana sunucudan sunulur. EÄer bir eÅleÅme saÄlanamazsa + URIâye dokunulmaz ve istek bir vekil isteÄi olarak ele alınır.
+ + +NameVirtualHost
yönergesi ile
+ tanımlanmıŠadres kümesindeki bir IP adresi üzerinden
+ eriÅilebilir.ServerAlias
ve
+ ServerPath
deÄerine bakılmaz._default_
sankonlar ile NameVirtualHost
+ yönergelerinin yer alıŠsırasının birbirlerine göre bir önemi yoktur.
+ Sıralama sadece aynı IP adresine sahip isme dayalı sankonlar arasında
+ önemlidir. Aynı adres kümesine mensup isme dayalı sankonlardan
+ yapılandırma dosyasında ilk sırada yer alanı en yüksek önceliÄe
+ sahiptir.Host:
+ baÅlık alanında belirtilen port asla kullanılmaz. Apache daima
+ istemcinin baÄlantı kurduÄu gerçek portu kullanır.ServerPath
yönergesinin deÄeri için
+ önek olan bir ServerPath
yönergesi yapılandırma
+ dosyasında daha önce yer alıyorsa sonrakiyle eÅleÅme asla
+ gerçekleÅmez. (Bu belirsizliÄi giderecek bir Host:
baÅlık
+ alanının mümkün olmadıÄı varsayılır.)_default_
sankon sadece istekle eÅleÅen bir IP
+ adresi bulunamadıÄında port numarası eÅleÅtiÄi takdirde isteÄe hizmet
+ sunabilir. Port düzeyinde eÅleÅmenin olabilmesi için isteÄin geldiÄi
+ port ile sankon için belirtilen port eÅleÅmelidir. Olası tüm portlarla
+ eÅleÅmeyi saÄlamak üzere yıldız imi (_default_:*
+ Åeklinde) kullanılabilir. Aynı Åey NameVirtualHost *
+ sankonlarına da uygulanır._default_
dahil hiçbir sankon ile eÅleÅme saÄlanamamıÅ
+ olmalıdır. BaÅka bir deyiÅle, istemcinin baÄlandıÄı port ile eÅleÅen
+ bir _default_
sankon olmadıkça adres ve port belirtmeyen
+ bir isteÄe ana_sunucu yanıt verecektir.Host:
baÅlık alanı içermeyen veya hedefi bilinmeyen bir
+ istek geldiÄi takdirde, eÄer bu istemcinin baÄlandıÄı adres ve port
+ için (örneÄin, NameVirtualHost
ile) tanımlanmıŠbir isme
+ dayalı sankon varsa bu isteÄe ne ana_sunucu ne de bir
+ _default_
sankon hizmet sunabilir.VirtualHost
yönergelerinde asla DNS isimleri
+ belirtmemelisiniz. Aksi takdirde sunucuyu baÅlatma sırasında DNS
+ sorgusu yapmaya zorlamıŠolursunuz. Listelenen tüm alanlar için DNS
+ üzerinde tam denetime sahip deÄilseniz bu ayrıca bir güvenlik
+ tehdidine yol açar. Bu konuda daha ayrıntılı bilgi edinmek için DNS ile ilgili konular ve Apache
+ belgesine bakınız.ServerName
her sankon için ayrı ayrı belirlenmiÅ
+ olmalıdır. Aksi takdirde her sankon için bir DNS sorgusu gerekir.DNS konuları sayfasındaki + ipuçlarına ilaveten burada da bazı ipuçları bulacaksınız:
+ +VirtualHost
+ tanımlarının öncesinde bitirin. Bu ayrıca yapılandırmanızın
+ okunabilirliÄini de arttırır; VirtualHost
tanımlarının
+ sonrasına sarkan yapılandırmaların katıÅtırılması iÅlemi tüm sanal
+ konakları etkileyebilen tanımlar bakımından bir
+ karıÅıklıÄa/belirsizliÄe sebep olabilir.)NameVirtualHost
ve
+ VirtualHost
tanımlarını okunabilirliÄi arttırmak için
+ gruplayın.ServerPath
için önek olan tanımlamalar
+ yapmaktan kaçının. Bundan kaçınamıyorsanız, yolu uzun olanı yolu kısa
+ olanın öncesine yerleÅtirin. ÃrneÄin, "ServerPath /abc/def" önce
+ "ServerPath /abc" sonra yer alsın.