1 <?xml version='1.0' encoding='UTF-8' ?>
2 <!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
3 <?xml-stylesheet type="text/xsl" href="../style/manual.tr.xsl"?>
4 <!-- English Revision: 420990:1053231 (outdated) -->
5 <!-- =====================================================
6 Translated by: Nilgün Belma Bugüner <nilgun belgeler.org>
7 Reviewed by: Orhan Berent <berent belgeler.org>
8 ========================================================== -->
11 Licensed to the Apache Software Foundation (ASF) under one or more
12 contributor license agreements. See the NOTICE file distributed with
13 this work for additional information regarding copyright ownership.
14 The ASF licenses this file to You under the Apache License, Version 2.0
15 (the "License"); you may not use this file except in compliance with
16 the License. You may obtain a copy of the License at
18 http://www.apache.org/licenses/LICENSE-2.0
20 Unless required by applicable law or agreed to in writing, software
21 distributed under the License is distributed on an "AS IS" BASIS,
22 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
23 See the License for the specific language governing permissions and
24 limitations under the License.
27 <manualpage metafile="details.xml.meta">
28 <parentdocument href="./">Sanal Konaklar</parentdocument>
29 <title>Sanal Konak Eşlemenin Derinliğine İncelenmesi</title>
33 <p>Sanal konak kodu <strong>Apache 1.3</strong> sürümünde baştan yeniden
34 yazıldı. Bu belgede, bir istek aldığında Apache’nin hangi sanal konak
35 ile hizmet sunacağına nasıl karar verdiği açıklanmaya çalışılmıştır.
36 <directive module="core">NameVirtualHost</directive> yönergesi sayesinde
37 sanal konak yapılandırması 1.3 sürümünün öncesine göre daha kolay ve
38 daha güvenilir hale gelmiştir.</p>
40 <p>Sanal konakların nasıl çalıştığını öğrenmeden sadece çalıştırmak
41 isterseniz doğrudan <a href="examples.html">örneklerin bulunduğu
42 sayfaya</a> bakabilirsiniz.</p>
46 <section id="configparsing"><title>Yapılandırma Dosyasının Çözümlenmesi</title>
48 <p>Bu belgede <code><VirtualHost></code> bölümleri dışında kalan
49 tanımlardan bahsederken <em>ana_sunucu</em>, <directive type="section"
50 module="core">VirtualHost</directive> bölümlerindeki tanımlamalardan
51 bahsederken <em>sankonlar</em> diyeceğiz.</p>
53 <p><directive module="mpm_common">Listen</directive>,
54 <directive module="core">ServerName</directive>,
55 <directive module="core">ServerPath</directive> ve
56 <directive module="core">ServerAlias</directive> yönergeleri bir sunucu
57 yapılandırmasının her yerinde karşımıza çıkabilir. Bununla birlikte,
58 sunucu dahilinde son göründükleri yerlerde önceki eşdeğerlerini geçersiz
61 <p><code>Listen</code> yönergesinin ana_sunucu için öntanımlı değeri
62 80’dir. <code>ServerPath</code> ve <code>ServerAlias</code>
63 yönergelerinin ana_sunucu için öntanımlı değerleri yoktur. Öntanımlı
64 <code>ServerName</code> değeri ise sunucunun IP adresinden elde
67 <p>Ana_sunucu <code>Listen</code> yönergesinin iki işlevi vardır. Biri
68 Apache’nin dinleyeceği öntanımlı ağ portunu belirlemek, diğeri ise
69 yönlendirmeler sırasında mutlak URI’lerde kullanılan port numarasını
72 <p>Ana_sunucunun aksine sankonların portları Apache‘nin dinleyeceği
73 portlar üzerinde etkili değildir.</p>
75 <p><code>VirtualHost</code> yönergesinde görünen her adresin seçimlik bir
76 portu olabilir. Eğer bir port belirtilmemişse öntanımlı olarak
77 ana_sunucunun son <code>Listen</code> yönergesinin değeri kullanılır.
78 Port olarak <code>*</code> belirtildiği takdirde bütün portlar dinlenir.
79 Adreslerin tamamını (DNS sorgularındaki çoklu A kayıtları dahil) içeren
80 kümeye sankonların <em>adres kümesi</em> denir.</p>
82 <p><directive module="core">NameVirtualHost</directive> yönergesi ilk
83 sankonun IP adresi için kullanılmadığı takdirde bu IP adresine sahip ilk
84 sankon IP’ye dayalı sankon olarak ele alınır. IP adresi olarak
85 <code>*</code> belirtmek de mümkündür.</p>
87 <p>Eğer isme dayalı sankonlar kullanılacaksa <code>NameVirtualHost</code>
88 yönergesinin bu isme dayalı sankonların IP adresi kümesini içermesi
89 <em>gerekir</em>. Başka bir deyişle, yapılandırma dosyanızın
90 <code>NameVirtualHost</code> yönergesine sankonların sunucu isimlerinin
91 karşı düştüğü IP adresini yazmalısınız.</p>
93 <p>Çok sayıda <code>NameVirtualHost</code> yönergesi belirtebilirse de her
94 IP:port çifti için birden fazla <code>NameVirtualHost</code> yönergesi
95 belirtilmemelidir.</p>
97 <p>Aşağıdaki iki örneğin eşdeğer olması için <code>NameVirtualHost</code>
98 ve <code>VirtualHost</code> yönergelerinin sıralamasının bir önemi
99 yoktur. (Sadece <em>tek</em> adreslik küme içindeki
100 <code>VirtualHost</code> yönergelerinin sırası önemlidir; aşağıya
105 NameVirtualHost 111.22.33.44<br />
106 <VirtualHost 111.22.33.44><br />
109 </VirtualHost><br />
110 <VirtualHost 111.22.33.44><br />
113 </VirtualHost><br />
115 NameVirtualHost 111.22.33.55<br />
116 <VirtualHost 111.22.33.55><br />
119 </VirtualHost><br />
120 <VirtualHost 111.22.33.55><br />
126 <VirtualHost 111.22.33.44><br />
128 </VirtualHost><br />
129 <VirtualHost 111.22.33.55><br />
132 </VirtualHost><br />
133 <VirtualHost 111.22.33.44><br />
136 </VirtualHost><br />
137 <VirtualHost 111.22.33.55><br />
140 </VirtualHost><br />
142 NameVirtualHost 111.22.33.44<br />
143 NameVirtualHost 111.22.33.55<br />
149 <p>(Okuma kolaylığı bakımından soldaki sürümü tercih etmenizi öneririz.)
152 <p><code>VirtualHost</code> yönergesi çözümlendikten sonra sankon
153 sunucusuna yönergedeki ilk isme atanmış portun öntanımlı olduğu bir
154 <code>Listen</code> verilir.</p>
156 <p>Eğer tüm <code>VirtualHost</code> isimlerinin listesi aynı adres
157 kümesine çözümleniyorsa bu isimler birer <code>ServerAlias</code> gibi
158 ele alınırlar (bir <code>ServerAlias</code> yönergesi ile geçersiz
159 kılınmadıkça). Bir sankon tanımından sonra gelen <code>Listen</code>
160 satırlarının o sankonun adres kümesine atanmış portlara bir etkisinin
161 olmayacağına dikkat ediniz.</p>
163 <p>İsim listeleri IP adreslerine göre gruplanır ve bir çiftler tablosuna
164 kaydedilir. Eğer IP adresi bir <code>NameVirtualHost</code> yönergesinde
165 kullanılmışsa, liste bu IP adresi için tanımlanmış tüm sankonları
166 içerir. Eğer bu IP adresinin tanımlandığı bir sankon yoksa o
167 <code>NameVirtualHost</code> yönergesi yoksayılır ve günlüğe bir hata
168 kaydı düşülür. IP’ye dayalı sankonlar için çiftler listesinde isim
171 <p>Çiftler listesini işleyen işlevin hızı nedeniyle bir istek sırasında IP
172 adresine göre gruplama yaparken kaynak harcaması en düşük düzeyde olur
173 hatta neredeyse hiç olmaz. Ek olarak, tablo, IP adresinin son
174 sekizlisindeki değişikliklere göre de en iyilenir.</p>
176 <p>Her sankon için bazı değerler öntanımlı olarak atanır. Bunların
180 <li>Sankon bir <directive module="core">ServerAdmin</directive>
181 yönergesi içermiyorsa,
182 <directive module="core">ResourceConfig</directive>,
183 <directive module="core">AccessConfig</directive>,
184 <directive module="core">Timeout</directive>,
185 <directive module="core">KeepAliveTimeout</directive>,
186 <directive module="core">KeepAlive</directive>,
187 <directive module="core">MaxKeepAliveRequests</directive>,
188 <directive module="core">ReceiveBufferSize</directive> ve
189 <directive module="core">SendBufferSize</directive> yönergeleri için
190 öntanımlı değerler ana_sunucudaki eşdeğerlerinden miras alınır. (Yani,
191 bu yönergeler için ana_sunucudaki son değerler miras alınır.)</li>
193 <li>Sankon için öntanımlı dizin erişim izinlerinin tanımlandığı "arama
194 öntanımlıları" ana_sunucununkilere katılır. Buna her modülün dizinlere
195 özgü yapılandırma bilgileri dahildir.</li>
197 <li>Her modülün ana_sunucudaki sunuculara özgü yapılandırmaları sankon
198 sunucusununkilerle katıştırılır.</li>
201 <p>Esasen, ana_sunucu, sankon sunucularını oluştururken bir öntanımlılar
202 listesi veya öntanımlı değerlere dayanak noktası olarak ele alınır.
203 Fakat bu ana_sunucu tanımlarının yapılandırma dosyasındaki yerlerinin
204 saptanmasının konumuzla ilgisi yoktur; ana_sunucu yapılandırmasının
205 tamamı son katıştırma yapılacağı zaman çözümlenir. Bu bakımdan,
206 ana_sunucu tanımlarından bir kısmı sankon tanımlarından sonra yer alsa
207 bile sankon tanımlarında etkili olabilir.</p>
209 <p>Eğer, bu noktada ana_sunucu hiçbir <code>ServerName</code> satırı
210 içermiyorsa <program>httpd</program> programının çalıştığı makinenin
211 konak ismi öntanımlıdır. Ana_sunucunun <code>ServerName</code> için
212 yaptığı DNS sorgusundan dönen IP adreslerine <em>ana_sunucu adres
213 kümesi</em> diyoruz.</p>
215 <p>Tanımsız <code>ServerName</code> alanları için bir isme dayalı sankon,
216 sankonu tanımlayan <code>VirtualHost</code> yönergesinde belirtilen ilk
217 adresi öntanımlı değer kabul eder.</p>
219 <p>Sihirli <code>_default_</code> sankonları için ana_sunucunun
220 <code>ServerName</code> değeri kullanılır.</p>
224 <section id="hostmatching"><title>Sanal Konağın Belirlenmesi</title>
226 <p>Sunucu bir istek durumunda hangi sankonun kullanılacağını şöyle
229 <section id="hashtable"><title>Değer çiftleri tablosu aranır</title>
231 <p>Bir istemci tarafından bağlantı ilk yapıldığında önce IP-isim çiftleri
232 tablosunda istemcinin bağlandığı IP adresi için bir arama yapılır.</p>
234 <p>Arama başarısız olursa (IP adresi yoksa) hizmet, istekte belirtilen
235 port için bir <code>_default_</code> sankon varsa, o sankondan, yoksa
236 ana_sunucudan sunulur.</p>
238 <p>Eğer çiftler tablosunda IP adresi yoksa port numarası ile eşleştirme
239 çabası ayrıca, diğer isme dayalı sanal konaklardaki gibi ard arda ele
240 alınmayı gerektiren <code>NameVirtualHost *</code> durumundaki bir
241 girdiyle sonuçlanabilir.</p>
243 <p>Arama sonucunda tabloda IP adresi bulunursa sonraki adım hizmetin bir
244 IP’ye dayalı sankondan mı yoksa isme dayalı bir sankondan mı
245 sunulacağına karar vermektir.</p>
249 <section id="ipbased"><title>IP’ye dayalı sankon</title>
251 <p>Eğer tabloda bulduğumuz girdinin isim alanları boşsa bir IP’ye dayalı
252 sanal konak bulmuşuz demektir. Artık karar vermek için başka bir şey
253 yapmaya gerek yoktur ve istek bu sankondan sunulur.</p>
257 <section id="namebased"><title>İsme dayalı sankon</title>
259 <p>Tabloda bulduğumuz girdi için bir isim listesi varsa bir isme dayalı
260 sankon sözkonusudur. Bu isim listesi, sankonları, ilgili
261 <code>VirtualHost</code> bölümlerinin yapılandırma dosyasında yer alış
262 sırasına göre içerir.</p>
264 <p>Bu listedeki ilk sankon (yapılandırma dosyasında belirtilen IP adresine
265 sahip ilk sankon) en yüksek önceliğe sahiptir ve sunucu ismi
266 belirtilmeyen veya <code>Host:</code> başlık alanı olmayan istekleri bu
269 <p>Eğer istemci bir <code>Host:</code> başlık alanı ile istek yapmışsa
270 liste bu sankon için aranır ve hizmet <code>ServerName</code> veya
271 <code>ServerAlias</code> ile ilk eşleşmenin sağlandığı sankondan
272 sunulur. <code>Host:</code> alanında bir port belirtilebilirse de Apache
273 daima istemcinin isteği gönderdiği portu gerçek port kabul eder.</p>
275 <p>Eğer istemci <code>Host:</code> başlık alanı bulunmayan bir HTTP/1.0
276 isteği yapmışsa istemcinin hangi sankona bağlanmayı denediğini bilemeyiz
277 ve istekteki URI ile mevcut <code>ServerPath</code> değerini
278 eşleştirmeye çalışırız. Listedekilerden ilk eşleşen yola sahip sankondan
281 <p>İstekle eşleşen bir sankon bulunamazsa IP listesinde istemcinin
282 bağlandığı portla eşleşen ilk sankondan hizmeti sunarız.</p>
286 <section id="persistent"><title>Kalıcı bağlantılar</title>
288 <p>Yukarıda açıklanan IP araması belli bir TCP/IP oturumunda bir defaya
289 mahsus yapıldığı halde bir kalıcı/KeepAlive bağlantı sırasında her istek
290 için ayrı bir arama yapılır. Başka bir deyişle, bir istemci tek bir
291 kalıcı bağlantı üzerinde farklı isme dayalı sankonlardan sayfa talebinde
296 <section id="absoluteURI"><title>Mutlak URI</title>
298 <p>Eğer istekte belirtilen URI bir mutlak URI ise ve istek yapılan konak
299 ismi ve port ana sunucuyla veya sankonlardan biriyle eşleşiyorsa,
300 şema/konakadı/port öneki ayrılır ve elde edilen göreli URI ilgili
301 sankondan veya ana sunucudan sunulur. Eğer bir eşleşme sağlanamazsa
302 URI’ye dokunulmaz ve istek bir vekil isteği olarak ele alınır.</p>
305 <section id="observations"><title>İzlenimler</title>
308 <li>Bir isme dayalı sankon asla bir IP’ye dayalı sankon ile (veya tersi)
309 etkileşime girmez. IP’ye dayalı sankonlara sadece kendi adres
310 kümesindeki bir IP adresi üzerinden erişilebilir, asla başka bir
311 adresten erişilemez. Aynısı isme dayalı sankonlara da uygulanır;
312 onlara sadece bir <code>NameVirtualHost</code> yönergesi ile
313 tanımlanmış adres kümesindeki bir IP adresi üzerinden
316 <li>Bir IP’ye dayalı sankon için asla <code>ServerAlias</code> ve
317 <code>ServerPath</code> değerine bakılmaz.</li>
319 <li>Yapılandırma dosyası içinde isme/IP’ye dayalı ve
320 <code>_default_</code> sankonlar ile <code>NameVirtualHost</code>
321 yönergelerinin yer alış sırasının birbirlerine göre bir önemi yoktur.
322 Sıralama sadece aynı IP adresine sahip isme dayalı sankonlar arasında
323 önemlidir. Aynı adres kümesine mensup isme dayalı sankonlardan
324 yapılandırma dosyasında ilk sırada yer alanı en yüksek önceliğe
327 <li>Güvenlik saikiyle, eşleştirme işlemi sırasında <code>Host:</code>
328 başlık alanında belirtilen port asla kullanılmaz. Apache daima
329 istemcinin bağlantı kurduğu gerçek portu kullanır.</li>
331 <li>Değeri başka bir <code>ServerPath</code> yönergesinin değeri için
332 önek olan bir <code>ServerPath</code> yönergesi yapılandırma
333 dosyasında daha önce yer alıyorsa sonrakiyle eşleşme asla
334 gerçekleşmez. (Bu belirsizliği giderecek bir <code>Host:</code> başlık
335 alanının mümkün olmadığı varsayılır.)</li>
337 <li>Eğer tek bir IP adresine sahip IP’ye dayalı iki sankon varsa eşleşme
338 daima yapılandırma dosyasında ilk yer alanla gerçekleşir. Böyle bir
339 şey kasten yapılmaz. Sunucu böyle bir durumu saptadığında hata
340 günlüğünde bir uyarı verecektir.</li>
342 <li>Bir <code>_default_</code> sankon sadece istekle eşleşen bir IP
343 adresi bulunamadığında port numarası eşleştiği takdirde isteğe hizmet
344 sunabilir. Port düzeyinde eşleşmenin olabilmesi için isteğin geldiği
345 port ile sankon için belirtilen port eşleşmelidir. Olası tüm portlarla
346 eşleşmeyi sağlamak üzere yıldız imi (<code>_default_:*</code>
347 şeklinde) kullanılabilir. Aynı şey <code>NameVirtualHost *</code>
348 sankonlarına da uygulanır.</li>
350 <li>Ana_sunucunun bir isteğe hizmet sunabilmesi için istemcinin
351 bağlandığı IP adresi ve port hiçbir yerde belirtilmemiş ve
352 <code>_default_</code> dahil hiçbir sankon ile eşleşme sağlanamamış
353 olmalıdır. Başka bir deyişle, istemcinin bağlandığı port ile eşleşen
354 bir <code>_default_</code> sankon olmadıkça adres ve port belirtmeyen
355 bir isteğe ana_sunucu yanıt verecektir.</li>
357 <li><code>Host:</code> başlık alanı içermeyen veya hedefi bilinmeyen bir
358 istek geldiği takdirde, eğer bu istemcinin bağlandığı adres ve port
359 için (örneğin, <code>NameVirtualHost</code> ile) tanımlanmış bir isme
360 dayalı sankon varsa bu isteğe ne ana_sunucu ne de bir
361 <code>_default_</code> sankon hizmet sunabilir.</li>
363 <li><code>VirtualHost</code> yönergelerinde asla DNS isimleri
364 belirtmemelisiniz. Aksi takdirde sunucuyu başlatma sırasında DNS
365 sorgusu yapmaya zorlamış olursunuz. Listelenen tüm alanlar için DNS
366 üzerinde tam denetime sahip değilseniz bu ayrıca bir güvenlik
367 tehdidine yol açar. Bu konuda daha ayrıntılı bilgi edinmek için <a
368 href="../dns-caveats.html">DNS ile ilgili konular ve Apache</a>
369 belgesine bakınız.</li>
371 <li><code>ServerName</code> her sankon için ayrı ayrı belirlenmiş
372 olmalıdır. Aksi takdirde her sankon için bir DNS sorgusu gerekir.</li>
378 <section id="tips"><title>İpuçları</title>
380 <p><a href="../dns-caveats.html#tips">DNS konuları</a> sayfasındaki
381 ipuçlarına ilaveten burada da bazı ipuçları bulacaksınız:</p>
384 <li>Ana_sunucu tanımlarının hepsini <code>VirtualHost</code>
385 tanımlarının öncesinde bitirin. Bu ayrıca yapılandırmanızın
386 okunabilirliğini de arttırır; <code>VirtualHost</code> tanımlarının
387 sonrasına sarkan yapılandırmaların katıştırılması işlemi tüm sanal
388 konakları etkileyebilen tanımlar bakımından bir
389 karışıklığa/belirsizliğe sebep olabilir.)</li>
391 <li>Birbirleriyle ilgili <code>NameVirtualHost</code> ve
392 <code>VirtualHost</code> tanımlarını okunabilirliği arttırmak için
395 <li>Değeri başka bir <code>ServerPath</code> için önek olan tanımlamalar
396 yapmaktan kaçının. Bundan kaçınamıyorsanız, yolu uzun olanı yolu kısa
397 olanın öncesine yerleştirin. Örneğin, "ServerPath /abc/def" önce
398 "ServerPath /abc" sonra yer alsın.</li>