mirror of
https://github.com/apache/httpd.git
synced 2025-11-05 05:30:39 +03:00
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1178089 13f79535-47bb-0310-9956-ffa450edef68
404 lines
19 KiB
XML
404 lines
19 KiB
XML
<?xml version='1.0' encoding='UTF-8' ?>
|
||
<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
|
||
<?xml-stylesheet type="text/xsl" href="../style/manual.tr.xsl"?>
|
||
<!-- English Revision: 420990:1174747 (outdated) -->
|
||
<!-- =====================================================
|
||
Translated by: Nilgün Belma Bugüner <nilgun belgeler.org>
|
||
Reviewed by: Orhan Berent <berent belgeler.org>
|
||
========================================================== -->
|
||
|
||
<!--
|
||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||
contributor license agreements. See the NOTICE file distributed with
|
||
this work for additional information regarding copyright ownership.
|
||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||
(the "License"); you may not use this file except in compliance with
|
||
the License. You may obtain a copy of the License at
|
||
|
||
http://www.apache.org/licenses/LICENSE-2.0
|
||
|
||
Unless required by applicable law or agreed to in writing, software
|
||
distributed under the License is distributed on an "AS IS" BASIS,
|
||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
See the License for the specific language governing permissions and
|
||
limitations under the License.
|
||
-->
|
||
|
||
<manualpage metafile="details.xml.meta">
|
||
<parentdocument href="./">Sanal Konaklar</parentdocument>
|
||
<title>Sanal Konak Eşlemenin Derinliğine İncelenmesi</title>
|
||
|
||
<summary>
|
||
|
||
<p>Sanal konak kodu <strong>Apache 1.3</strong> 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.
|
||
<directive module="core">NameVirtualHost</directive> 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.</p>
|
||
|
||
<p>Sanal konakların nasıl çalıştığını öğrenmeden sadece çalıştırmak
|
||
isterseniz doğrudan <a href="examples.html">örneklerin bulunduğu
|
||
sayfaya</a> bakabilirsiniz.</p>
|
||
|
||
</summary>
|
||
|
||
<section id="configparsing"><title>Yapılandırma Dosyasının Çözümlenmesi</title>
|
||
|
||
<p>Bu belgede <code><VirtualHost></code> bölümleri dışında kalan
|
||
tanımlardan bahsederken <em>ana_sunucu</em>, <directive type="section"
|
||
module="core">VirtualHost</directive> bölümlerindeki tanımlamalardan
|
||
bahsederken <em>sankonlar</em> diyeceğiz.</p>
|
||
|
||
<p><directive module="mpm_common">Listen</directive>,
|
||
<directive module="core">ServerName</directive>,
|
||
<directive module="core">ServerPath</directive> ve
|
||
<directive module="core">ServerAlias</directive> 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.</p>
|
||
|
||
<p><code>Listen</code> yönergesinin ana_sunucu için öntanımlı değeri
|
||
80’dir. <code>ServerPath</code> ve <code>ServerAlias</code>
|
||
yönergelerinin ana_sunucu için öntanımlı değerleri yoktur. Öntanımlı
|
||
<code>ServerName</code> değeri ise sunucunun IP adresinden elde
|
||
edilir.</p>
|
||
|
||
<p>Ana_sunucu <code>Listen</code> 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.</p>
|
||
|
||
<p>Ana_sunucunun aksine sankonların portları Apache‘nin dinleyeceği
|
||
portlar üzerinde etkili değildir.</p>
|
||
|
||
<p><code>VirtualHost</code> yönergesinde görünen her adresin seçimlik bir
|
||
portu olabilir. Eğer bir port belirtilmemişse öntanımlı olarak
|
||
ana_sunucunun son <code>Listen</code> yönergesinin değeri kullanılır.
|
||
Port olarak <code>*</code> 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 <em>adres kümesi</em> denir.</p>
|
||
|
||
<p><directive module="core">NameVirtualHost</directive> 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
|
||
<code>*</code> belirtmek de mümkündür.</p>
|
||
|
||
<p>Eğer isme dayalı sankonlar kullanılacaksa <code>NameVirtualHost</code>
|
||
yönergesinin bu isme dayalı sankonların IP adresi kümesini içermesi
|
||
<em>gerekir</em>. Başka bir deyişle, yapılandırma dosyanızın
|
||
<code>NameVirtualHost</code> yönergesine sankonların sunucu isimlerinin
|
||
karşı düştüğü IP adresini yazmalısınız.</p>
|
||
|
||
<p>Çok sayıda <code>NameVirtualHost</code> yönergesi belirtebilirse de her
|
||
IP:port çifti için birden fazla <code>NameVirtualHost</code> yönergesi
|
||
belirtilmemelidir.</p>
|
||
|
||
<p>Aşağıdaki iki örneğin eşdeğer olması için <code>NameVirtualHost</code>
|
||
ve <code>VirtualHost</code> yönergelerinin sıralamasının bir önemi
|
||
yoktur. (Sadece <em>tek</em> adreslik küme içindeki
|
||
<code>VirtualHost</code> yönergelerinin sırası önemlidir; aşağıya
|
||
bakınız:)</p>
|
||
|
||
<table><tr>
|
||
<td><example>
|
||
NameVirtualHost 111.22.33.44<br />
|
||
<VirtualHost 111.22.33.44><br />
|
||
# sunucu A<br />
|
||
...<br />
|
||
</VirtualHost><br />
|
||
<VirtualHost 111.22.33.44><br />
|
||
# sunucu B<br />
|
||
...<br />
|
||
</VirtualHost><br />
|
||
<br />
|
||
NameVirtualHost 111.22.33.55<br />
|
||
<VirtualHost 111.22.33.55><br />
|
||
# sunucu C<br />
|
||
...<br />
|
||
</VirtualHost><br />
|
||
<VirtualHost 111.22.33.55><br />
|
||
# sunucu D<br />
|
||
...<br />
|
||
</VirtualHost>
|
||
</example></td>
|
||
<td><example>
|
||
<VirtualHost 111.22.33.44><br />
|
||
# sunucu A<br />
|
||
</VirtualHost><br />
|
||
<VirtualHost 111.22.33.55><br />
|
||
# sunucu C<br />
|
||
...<br />
|
||
</VirtualHost><br />
|
||
<VirtualHost 111.22.33.44><br />
|
||
# sunucu B<br />
|
||
...<br />
|
||
</VirtualHost><br />
|
||
<VirtualHost 111.22.33.55><br />
|
||
# sunucu D<br />
|
||
...<br />
|
||
</VirtualHost><br />
|
||
<br />
|
||
NameVirtualHost 111.22.33.44<br />
|
||
NameVirtualHost 111.22.33.55<br />
|
||
<br />
|
||
</example></td>
|
||
</tr></table>
|
||
|
||
|
||
<p>(Okuma kolaylığı bakımından soldaki sürümü tercih etmenizi öneririz.)
|
||
</p>
|
||
|
||
<p><code>VirtualHost</code> yönergesi çözümlendikten sonra sankon
|
||
sunucusuna yönergedeki ilk isme atanmış portun öntanımlı olduğu bir
|
||
<code>Listen</code> verilir.</p>
|
||
|
||
<p>Eğer tüm <code>VirtualHost</code> isimlerinin listesi aynı adres
|
||
kümesine çözümleniyorsa bu isimler birer <code>ServerAlias</code> gibi
|
||
ele alınırlar (bir <code>ServerAlias</code> yönergesi ile geçersiz
|
||
kılınmadıkça). Bir sankon tanımından sonra gelen <code>Listen</code>
|
||
satırlarının o sankonun adres kümesine atanmış portlara bir etkisinin
|
||
olmayacağına dikkat ediniz.</p>
|
||
|
||
<p>İsim listeleri IP adreslerine göre gruplanır ve bir çiftler tablosuna
|
||
kaydedilir. Eğer IP adresi bir <code>NameVirtualHost</code> 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
|
||
<code>NameVirtualHost</code> 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.</p>
|
||
|
||
<p>Ç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.</p>
|
||
|
||
<p>Her sankon için bazı değerler öntanımlı olarak atanır. Bunların
|
||
başlıcaları:</p>
|
||
|
||
<ol>
|
||
<li>Sankon bir <directive module="core">ServerAdmin</directive>
|
||
yönergesi içermiyorsa,
|
||
<directive module="core">ResourceConfig</directive>,
|
||
<directive module="core">AccessConfig</directive>,
|
||
<directive module="core">Timeout</directive>,
|
||
<directive module="core">KeepAliveTimeout</directive>,
|
||
<directive module="core">KeepAlive</directive>,
|
||
<directive module="core">MaxKeepAliveRequests</directive>,
|
||
<directive module="core">ReceiveBufferSize</directive> ve
|
||
<directive module="core">SendBufferSize</directive> 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.)</li>
|
||
|
||
<li>Sankon için öntanımlı dizin erişim izinlerinin tanımlandığı "arama
|
||
öntanımlıları" ana_sunucununkilere katılır. Buna her modülün dizinlere
|
||
özgü yapılandırma bilgileri dahildir.</li>
|
||
|
||
<li>Her modülün ana_sunucudaki sunuculara özgü yapılandırmaları sankon
|
||
sunucusununkilerle katıştırılır.</li>
|
||
</ol>
|
||
|
||
<p>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.</p>
|
||
|
||
<p>Eğer, bu noktada ana_sunucu hiçbir <code>ServerName</code> satırı
|
||
içermiyorsa <program>httpd</program> programının çalıştığı makinenin
|
||
konak ismi öntanımlıdır. Ana_sunucunun <code>ServerName</code> için
|
||
yaptığı DNS sorgusundan dönen IP adreslerine <em>ana_sunucu adres
|
||
kümesi</em> diyoruz.</p>
|
||
|
||
<p>Tanımsız <code>ServerName</code> alanları için bir isme dayalı sankon,
|
||
sankonu tanımlayan <code>VirtualHost</code> yönergesinde belirtilen ilk
|
||
adresi öntanımlı değer kabul eder.</p>
|
||
|
||
<p>Sihirli <code>_default_</code> sankonları için ana_sunucunun
|
||
<code>ServerName</code> değeri kullanılır.</p>
|
||
|
||
</section>
|
||
|
||
<section id="hostmatching"><title>Sanal Konağın Belirlenmesi</title>
|
||
|
||
<p>Sunucu bir istek durumunda hangi sankonun kullanılacağını şöyle
|
||
belirler:</p>
|
||
|
||
<section id="hashtable"><title>Değer çiftleri tablosu aranır</title>
|
||
|
||
<p>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.</p>
|
||
|
||
<p>Arama başarısız olursa (IP adresi yoksa) hizmet, istekte belirtilen
|
||
port için bir <code>_default_</code> sankon varsa, o sankondan, yoksa
|
||
ana_sunucudan sunulur.</p>
|
||
|
||
<p>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 <code>NameVirtualHost *</code> durumundaki bir
|
||
girdiyle sonuçlanabilir.</p>
|
||
|
||
<p>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.</p>
|
||
|
||
</section>
|
||
|
||
<section id="ipbased"><title>IP’ye dayalı sankon</title>
|
||
|
||
<p>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.</p>
|
||
|
||
</section>
|
||
|
||
<section id="namebased"><title>İsme dayalı sankon</title>
|
||
|
||
<p>Tabloda bulduğumuz girdi için bir isim listesi varsa bir isme dayalı
|
||
sankon sözkonusudur. Bu isim listesi, sankonları, ilgili
|
||
<code>VirtualHost</code> bölümlerinin yapılandırma dosyasında yer alış
|
||
sırasına göre içerir.</p>
|
||
|
||
<p>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 <code>Host:</code> başlık alanı olmayan istekleri bu
|
||
sankon karşılar.</p>
|
||
|
||
<p>Eğer istemci bir <code>Host:</code> başlık alanı ile istek yapmışsa
|
||
liste bu sankon için aranır ve hizmet <code>ServerName</code> veya
|
||
<code>ServerAlias</code> ile ilk eşleşmenin sağlandığı sankondan
|
||
sunulur. <code>Host:</code> alanında bir port belirtilebilirse de Apache
|
||
daima istemcinin isteği gönderdiği portu gerçek port kabul eder.</p>
|
||
|
||
<p>Eğer istemci <code>Host:</code> 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 <code>ServerPath</code> değerini
|
||
eşleştirmeye çalışırız. Listedekilerden ilk eşleşen yola sahip sankondan
|
||
hizmeti sunarız.</p>
|
||
|
||
<p>İstekle eşleşen bir sankon bulunamazsa IP listesinde istemcinin
|
||
bağlandığı portla eşleşen ilk sankondan hizmeti sunarız.</p>
|
||
|
||
</section>
|
||
|
||
<section id="persistent"><title>Kalıcı bağlantılar</title>
|
||
|
||
<p>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.</p>
|
||
|
||
</section>
|
||
|
||
<section id="absoluteURI"><title>Mutlak URI</title>
|
||
|
||
<p>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.</p>
|
||
</section>
|
||
|
||
<section id="observations"><title>İzlenimler</title>
|
||
|
||
<ul>
|
||
<li>Bir isme dayalı sankon asla bir IP’ye dayalı sankon ile (veya tersi)
|
||
etkileşime girmez. IP’ye dayalı sankonlara sadece kendi adres
|
||
kümesindeki bir IP adresi üzerinden erişilebilir, asla başka bir
|
||
adresten erişilemez. Aynısı isme dayalı sankonlara da uygulanır;
|
||
onlara sadece bir <code>NameVirtualHost</code> yönergesi ile
|
||
tanımlanmış adres kümesindeki bir IP adresi üzerinden
|
||
erişilebilir.</li>
|
||
|
||
<li>Bir IP’ye dayalı sankon için asla <code>ServerAlias</code> ve
|
||
<code>ServerPath</code> değerine bakılmaz.</li>
|
||
|
||
<li>Yapılandırma dosyası içinde isme/IP’ye dayalı ve
|
||
<code>_default_</code> sankonlar ile <code>NameVirtualHost</code>
|
||
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.</li>
|
||
|
||
<li>Güvenlik saikiyle, eşleştirme işlemi sırasında <code>Host:</code>
|
||
başlık alanında belirtilen port asla kullanılmaz. Apache daima
|
||
istemcinin bağlantı kurduğu gerçek portu kullanır.</li>
|
||
|
||
<li>Değeri başka bir <code>ServerPath</code> yönergesinin değeri için
|
||
önek olan bir <code>ServerPath</code> 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 <code>Host:</code> başlık
|
||
alanının mümkün olmadığı varsayılır.)</li>
|
||
|
||
<li>Eğer tek bir IP adresine sahip IP’ye dayalı iki sankon varsa eşleşme
|
||
daima yapılandırma dosyasında ilk yer alanla gerçekleşir. Böyle bir
|
||
şey kasten yapılmaz. Sunucu böyle bir durumu saptadığında hata
|
||
günlüğünde bir uyarı verecektir.</li>
|
||
|
||
<li>Bir <code>_default_</code> 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 (<code>_default_:*</code>
|
||
şeklinde) kullanılabilir. Aynı şey <code>NameVirtualHost *</code>
|
||
sankonlarına da uygulanır.</li>
|
||
|
||
<li>Ana_sunucunun bir isteğe hizmet sunabilmesi için istemcinin
|
||
bağlandığı IP adresi ve port hiçbir yerde belirtilmemiş ve
|
||
<code>_default_</code> 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 <code>_default_</code> sankon olmadıkça adres ve port belirtmeyen
|
||
bir isteğe ana_sunucu yanıt verecektir.</li>
|
||
|
||
<li><code>Host:</code> 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, <code>NameVirtualHost</code> ile) tanımlanmış bir isme
|
||
dayalı sankon varsa bu isteğe ne ana_sunucu ne de bir
|
||
<code>_default_</code> sankon hizmet sunabilir.</li>
|
||
|
||
<li><code>VirtualHost</code> 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 <a
|
||
href="../dns-caveats.html">DNS ile ilgili konular ve Apache</a>
|
||
belgesine bakınız.</li>
|
||
|
||
<li><code>ServerName</code> her sankon için ayrı ayrı belirlenmiş
|
||
olmalıdır. Aksi takdirde her sankon için bir DNS sorgusu gerekir.</li>
|
||
</ul>
|
||
</section>
|
||
|
||
</section>
|
||
|
||
<section id="tips"><title>İpuçları</title>
|
||
|
||
<p><a href="../dns-caveats.html#tips">DNS konuları</a> sayfasındaki
|
||
ipuçlarına ilaveten burada da bazı ipuçları bulacaksınız:</p>
|
||
|
||
<ul>
|
||
<li>Ana_sunucu tanımlarının hepsini <code>VirtualHost</code>
|
||
tanımlarının öncesinde bitirin. Bu ayrıca yapılandırmanızın
|
||
okunabilirliğini de arttırır; <code>VirtualHost</code> 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.)</li>
|
||
|
||
<li>Birbirleriyle ilgili <code>NameVirtualHost</code> ve
|
||
<code>VirtualHost</code> tanımlarını okunabilirliği arttırmak için
|
||
gruplayın.</li>
|
||
|
||
<li>Değeri başka bir <code>ServerPath</code> 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.</li>
|
||
</ul>
|
||
|
||
</section>
|
||
</manualpage>
|
||
|