From e20d24df2338a78eee37e3e6887c2e377337ef04 Mon Sep 17 00:00:00 2001 From: Takashi Sato Date: Mon, 16 Jun 2008 08:46:35 +0000 Subject: [PATCH] new Turkish translations. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Submitted by: Nilgün Belma Bugüner Reviewed by: Orhan Berent git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@668072 13f79535-47bb-0310-9956-ffa450edef68 --- docs/manual/vhosts/details.xml.tr | 403 ++++++++++++++++++ docs/manual/vhosts/examples.xml.tr | 627 ++++++++++++++++++++++++++++ docs/manual/vhosts/fd-limits.xml.tr | 123 ++++++ docs/manual/vhosts/mass.xml.tr | 405 ++++++++++++++++++ 4 files changed, 1558 insertions(+) create mode 100644 docs/manual/vhosts/details.xml.tr create mode 100644 docs/manual/vhosts/examples.xml.tr create mode 100644 docs/manual/vhosts/fd-limits.xml.tr create mode 100644 docs/manual/vhosts/mass.xml.tr diff --git a/docs/manual/vhosts/details.xml.tr b/docs/manual/vhosts/details.xml.tr new file mode 100644 index 0000000000..5cc1d5a2f6 --- /dev/null +++ b/docs/manual/vhosts/details.xml.tr @@ -0,0 +1,403 @@ + + + + + + + + + +Sanal Konaklar + Sanal Konak Eşlemenin Derinliğine İncelenmesi + + + +

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.

+ +
+ +
Yapılandırma Dosyasının Çözümlenmesi + +

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:)

+ + + + +
+ NameVirtualHost 111.22.33.44
+ <VirtualHost 111.22.33.44>
+ # sunucu A
+ ...
+ </VirtualHost>
+ <VirtualHost 111.22.33.44>
+ # sunucu B
+ ...
+ </VirtualHost>
+
+ NameVirtualHost 111.22.33.55
+ <VirtualHost 111.22.33.55>
+ # sunucu C
+ ...
+ </VirtualHost>
+ <VirtualHost 111.22.33.55>
+ # sunucu D
+ ...
+ </VirtualHost> +
+ <VirtualHost 111.22.33.44>
+ # sunucu A
+ </VirtualHost>
+ <VirtualHost 111.22.33.55>
+ # sunucu C
+ ...
+ </VirtualHost>
+ <VirtualHost 111.22.33.44>
+ # sunucu B
+ ...
+ </VirtualHost>
+ <VirtualHost 111.22.33.55>
+ # sunucu D
+ ...
+ </VirtualHost>
+
+ NameVirtualHost 111.22.33.44
+ NameVirtualHost 111.22.33.55
+
+
+ + +

(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ı:

+ +
    +
  1. Sankon bir 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.)
  2. + +
  3. 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.
  4. + +
  5. Her modülün ana_sunucudaki sunuculara özgü yapılandırmaları sankon + sunucusununkilerle katıştırılır.
  6. +
+ +

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.

+ +
+ +
Sanal Konağın Belirlenmesi + +

Sunucu bir istek durumunda hangi sankonun kullanılacağını şöyle + belirler:

+ +
Değer çiftleri tablosu aranır + +

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.

+ +
+ +
IP’ye dayalı sankon + +

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.

+ +
+ +
İsme dayalı sankon + +

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.

+ +
+ +
Kalıcı bağlantılar + +

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.

+ +
+ +
Mutlak URI + +

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.

+
+ +
İzlenimler + +
    +
  • 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 NameVirtualHost yönergesi ile + tanımlanmış adres kümesindeki bir IP adresi üzerinden + erişilebilir.
  • + +
  • Bir IP’ye dayalı sankon için asla ServerAlias ve + ServerPath değerine bakılmaz.
  • + +
  • Yapılandırma dosyası içinde isme/IP’ye dayalı ve + _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.
  • + +
  • Güvenlik saikiyle, eşleştirme işlemi sırasında Host: + başlık alanında belirtilen port asla kullanılmaz. Apache daima + istemcinin bağlantı kurduğu gerçek portu kullanır.
  • + +
  • Değeri başka bir 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.)
  • + +
  • 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.
  • + +
  • Bir _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.
  • + +
  • Ana_sunucunun bir isteğe hizmet sunabilmesi için istemcinin + bağlandığı IP adresi ve port hiçbir yerde belirtilmemiş ve + _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.
  • +
+
+ +
+ +
İpuçları + +

DNS konuları sayfasındaki + ipuçlarına ilaveten burada da bazı ipuçları bulacaksınız:

+ +
    +
  • Ana_sunucu tanımlarının hepsini 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.)
  • + +
  • Birbirleriyle ilgili NameVirtualHost ve + VirtualHost tanımlarını okunabilirliği arttırmak için + gruplayın.
  • + +
  • Değeri başka bir 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.
  • +
+ +
+
+ diff --git a/docs/manual/vhosts/examples.xml.tr b/docs/manual/vhosts/examples.xml.tr new file mode 100644 index 0000000000..4c417b4225 --- /dev/null +++ b/docs/manual/vhosts/examples.xml.tr @@ -0,0 +1,627 @@ + + + + + + + + + +Sanal Konaklar + Sanal Konak Örnekleri + + + +

Bu belgede sanal konaklarla ile ilgili olarak karşılaşılması olası tüm + senaryolara yer verilmeye çalışılmıştır. Buradaki senaryolar, tek bir + sunucu üzerinde isme dayalı veya IP’ye dayalı sanal konaklar aracılığıyla çok + sayıda sitenin sunumu ile ilgilidir. +

+ +
+ +
+ Tek bir IP ile çok sayıda isme dayalı site + +

Bu örnekte, makinenizin tek bir IP adresine sahip olduğunu ve bu + makineye mesela.dom ve faraza.dom şeklinde + (DNS A kayıtları sayesinde) farklı isimlerle erişilebildiğini + varsayalım.

+ + Bilginize

Apache sunucusu üzerinde sanal konakları + yapılandırmakla bu konak isimleri için sihirli bir şekilde DNS + kayıtlarının da oluşturulmasını sağlamış olmazsınız. Bu isimler için + ilgili DNS kayıtlarında sizin IP adresinize çözümlenen A kayıtlarının + olması gerekir, yoksa sitenize kimse erişemez. Sitelere erişimi yerel + olarak denemek isterseniz, bu girdileri hosts dosyanıza + yazabilirsiniz. Fakat bu sadece sizin makinenizde çalışır. Yerel + ağınızdaki her makinenin hosts dosyasına bu girdileri + yazarak yerel ağdan erişimi bu yolla sağlayabilirsiniz ama dış ağdan + gelecek ziyaretçileriniz için DNS kayıtlarınızın olması şarttır.

+
+ + Sunucu yapılandırması + + # Apache’nin 80. portu dinlediğinden emin olalım
+ Listen 80
+
+ # Sanal konak istekleri için bütün IP adresleri dinlensin.
+ NameVirtualHost *:80
+
+ <VirtualHost *:80>
+ + DocumentRoot /siteler/mesela
+ ServerName mesela.dom
+
+ # Diğer yönergeler, burada ...
+
+
+ </VirtualHost>
+
+ <VirtualHost *:80>
+ + DocumentRoot /siteler/faraza
+ ServerName faraza.dom
+
+ # Diğer yönergeler, burada ...
+
+
+ </VirtualHost> +
+ +

Yıldız imleri tüm adreslerle eşleşmeyi sağladığından ana sunucu + (yapılandırma dosyası genelindeki yapılandırma - sunucu geneli) + erişilebilir olmayacaktır. mesela.dom yapılandırma + dosyasındaki ilk sanal konak olduğundan en yüksek önceliğe sahiptir ve + öntanımlı veya baskın site olarak davranır. + Yani, hiçbir ServerName yönergesi ile eşleşmeyen bir istek + alındığında bu istek ilk VirtualHost yapılandırması ile + karşılanır.

+ + Bilginize +

İsterseniz, * yerine kendi IP adresinizi yazabilirsiniz. + Ancak bu durumda bunu hem VirtualHost hem de + NameVirtualHost için yapmalısınız:

+ + + NameVirtualHost 192.168.1.22
+
+ <VirtualHost 192.168.1.22>
+ # vs. ... +
+ +

Bununla birlikte, IP adresinin önceden kestirilebilir olmadığı + sistemlerde, örneğin, hizmet sağlayıcınıza çevirmeli ağ ile bağlanıyor + ve onun rasgele atadığı bir IP adresi için bir devingen DNS çözümü + kullanıyorsanız, IP adresi değil de * kullanmak daha çok + işinize yarayacaktır. Yıldız imi her IP adresi ile eşleşeceğinden IP + adresiniz değişse bile bu yapılandırmayı değiştirmeden + kullanabilirsiniz.

+
+ +

Yukarıdaki yapılandırmayı hemen hemen tüm isme dayalı sanal konaklar + için kullanabilirsiniz. Bu yapılandırmanın çalışmayacağı tek durum, + farklı içerikleri farklı IP adreslerinden sunma gereğiyle + karşılaşmaktır.

+ +
+ +
+ IP adresleri farklı çok sayıda isme dayalı site + + Bilginize +

Burada açıklanan teknikler istendiği kadar çok IP adresine + genişletilebilir.

+
+ +

Sunucunun iki IP adresi olsun. Birinden "ana sunucu" + (192.168.1.2) diğerinden mesela.dom + 192.168.2.2 hizmet versin. Bu arada başka sanal konakları + da sunabilelim istiyoruz.

+ + Sunucu yapılandırması + + Listen 80
+
+ # Bu, 192.168.1.2 adresindeki "ana sunucu" olsun
+ ServerName sunucu.faraza.dom
+ DocumentRoot /siteler/anasunucu
+
+ # Burası da diğer adres için
+ NameVirtualHost 192.168.2.2
+
+ <VirtualHost 192.168.2.2>
+ + DocumentRoot /siteler/mesela
+ ServerName mesela.dom
+
+ # Diğer yönergeler, burada ...
+
+
+ </VirtualHost>
+
+ <VirtualHost 192.168.2.2>
+ + DocumentRoot /siteler/falanca
+ ServerName falanca.dom
+
+ # Diğer yönergeler, burada ...
+
+
+ </VirtualHost> +
+ +

192.168.2.2 adresinden gelmeyen tüm isteklere ana sunucu + (sunucu.faraza.dom), 192.168.2.2 adresinden + gelen sunucu ismi belirtmeyenler ile Host: başlığı + belirtmeyenlere ise mesela.dom hizmet verecektir.

+ +
+ +
Aynı içeriği farklı IP adresleriyle sunmak + (örn., dahili ve harici ağlara) + +

Sunucu makine iki IP adresine sahip olsun. Biri iç ağa + (192.168.1.1) diğeri dış ağa (172.20.30.40) + bakıyor olsun. sunucu.mesela.dom ismi dış ağda dış ağa + bakan IP’ye, iç ağda ise iç ağa bakan IP’ye çözümleniyor olsun.

+ +

Bu durumda, sunucu hem iç hem de dış ağdan gelen isteklere aynı içerik, + dolayısıyla aynı VirtualHost bölümü ile hizmet + verebilir.

+ + Sunucu yapılandırması + + NameVirtualHost 192.168.1.1
+ NameVirtualHost 172.20.30.40
+
+ <VirtualHost 192.168.1.1 172.20.30.40>
+ + DocumentRoot /siteler/sunucu
+ ServerName sunucu.mesela.dom
+ ServerAlias sunucu
+
+ </VirtualHost> +
+ +

Artık, hem iç hem de dış ağdan gelen isteklere aynı + VirtualHost bölümünden hizmet sunulacaktır.

+ + Bilginize: +

İç ağdan istek yapan biri, tam nitelenmiş konak ismi + sunucu.mesela.dom yerine makine ismini + (sunucu) kullanabilir (ServerAlias sunucu + satırına dikkat).

+ +

Ayrıca, yukarıdaki gibi iki ayrı IP adresi belirtmek yerine sadece + * belirtmekle sunucunun tüm IP adreslerine yine aynı + içerikle yanıt vereceğine dikkat ediniz.

+
+ +
+ +
Farklı portlarla farklı siteler + +

Aynı IP adresine sahip çok sayıda konak ismine sahip olduğunuzu ve + bunların bazılarının farklı portları kullanmasını istediğinizi + varsayalım. NameVirtualHost + yönergesi ile port tanımlamak suretiyle bunu mümkün kılabilirsiniz. + NameVirtualHost isim:port tanımı yapmadan + veya bunun yerine Listen + kullanarak VirtualHost isim:port kullanmaya + kalkışırsanız, yapılandırmanız çalışmayacaktır.

+ + Sunucu yapılandırması + + Listen 80
+ Listen 8080
+
+ NameVirtualHost 172.20.30.40:80
+ NameVirtualHost 172.20.30.40:8080
+
+ <VirtualHost 172.20.30.40:80>
+ + ServerName mesela.dom
+ DocumentRoot /siteler/mesela-80
+
+ </VirtualHost>
+
+ <VirtualHost 172.20.30.40:8080>
+ + ServerName mesela.dom
+ DocumentRoot /siteler/mesela-8080
+
+ </VirtualHost>
+
+ <VirtualHost 172.20.30.40:80>
+ + ServerName faraza.dom
+ DocumentRoot /siteler/faraza-80
+
+ </VirtualHost>
+
+ <VirtualHost 172.20.30.40:8080>
+ + ServerName faraza.dom
+ DocumentRoot /siteler/faraza-8080
+
+ </VirtualHost> +
+ +
+ +
IP’ye dayalı sanal konaklar + +

Sunucu makinenin, biri mesela.dom adından çözümlenen + 172.20.30.40, diğeri faraza.dom adından + çözümlenen 172.20.30.50 diye iki IP adresi olsun.

+ + Sunucu yapılandırması + + Listen 80
+
+ <VirtualHost 172.20.30.40>
+ + DocumentRoot /siteler/mesela
+ ServerName mesela.dom
+
+ </VirtualHost>
+
+ <VirtualHost 172.20.30.50>
+ + DocumentRoot /siteler/faraza
+ ServerName faraza.dom
+
+ </VirtualHost> +
+ +

<VirtualHost> yönergelerinde belirtilmeyen + adreslerle yapılan isteklere (örneğin, localhost) sunucu + genelindeki yapılandırma ile ana sunucu yanıt verecektir.

+
+ +
+ Hem IP’ye hem de porta dayalı sanal konaklar + +

Sunucu makinenin, biri mesela.dom adından çözümlenen + 172.20.30.40, diğeri faraza.dom adından + çözümlenen 172.20.30.50 diye iki IP adresi olsun ve iki + konak da hem 80 hem de 8080 portlarında çalışsınlar istiyoruz.

+ + Sunucu yapılandırması + + Listen 172.20.30.40:80
+ Listen 172.20.30.40:8080
+ Listen 172.20.30.50:80
+ Listen 172.20.30.50:8080
+
+ <VirtualHost 172.20.30.40:80>
+ + DocumentRoot /siteler/mesela-80
+ ServerName mesela.dom
+
+ </VirtualHost>
+
+ <VirtualHost 172.20.30.40:8080>
+ + DocumentRoot /siteler/mesela-8080
+ ServerName mesela.dom
+
+ </VirtualHost>
+
+ <VirtualHost 172.20.30.50:80>
+ + DocumentRoot /siteler/faraza-80
+ ServerName faraza.dom
+
+ </VirtualHost>
+
+ <VirtualHost 172.20.30.50:8080>
+ + DocumentRoot /siteler/faraza-8080
+ ServerName faraza.dom
+
+ </VirtualHost> +
+ +
+ +
+ Hem isme hem de IP‘ye dayalı sanal konaklar + +

Bazı adreslerde isme dayalı, bazılarında da IP’ye dayalı sanal konaklar + çalışsın istersek...

+ + Sunucu yapılandırması + + Listen 80
+
+ NameVirtualHost 172.20.30.40
+
+ <VirtualHost 172.20.30.40>
+ + DocumentRoot /siteler/mesela
+ ServerName mesela.dom
+
+ </VirtualHost>
+
+ <VirtualHost 172.20.30.40>
+ + DocumentRoot /siteler/faraza
+ ServerName faraza.dom
+
+ </VirtualHost>
+
+ <VirtualHost 172.20.30.40>
+ + DocumentRoot /siteler/falanca
+ ServerName falanca.dom
+
+ </VirtualHost>
+
+ # IP-based
+ <VirtualHost 172.20.30.50>
+ + DocumentRoot /siteler/filanca
+ ServerName filanca.dom
+
+ </VirtualHost>
+
+ <VirtualHost 172.20.30.60>
+ + DocumentRoot /siteler/fesmekan
+ ServerName fesmekan.dom
+
+ </VirtualHost> +
+ +
+ +
<code>Virtualhost</code> ve + <code>mod_proxy</code>’nin birlikte kullanımı + +

Bu örnekte bir arabirimi dışarıya bakan bir makinede, başka bir + makinede çalışan bir sunucuya sanal konak olarak, bir vekil sunucu + çalıştırmak istediğimizi varsayıyoruz. 192.168.111.2 IP + adresli bir makinede aynı isimde bir sanal konak yapılandırılmış olsun. + Çok sayıda konak ismi için vekil olarak tek bir makine kullandığımızdan + ve konak isminin de aktarılmasını arzuladığımızdan ProxyPreserveHost On yönergesini + kullandık.

+ + + <VirtualHost *:*>
+ + ProxyPreserveHost On
+ ProxyPass / http://192.168.111.2/
+ ProxyPassReverse / http://192.168.111.2/
+ ServerName konak.mesela.dom
+
+ </VirtualHost> +
+ +
+ +
<code>_default_</code> sanal konakları + +
+ Tüm portlar için <code>_default_</code> + +

Bir IP adresi ve port belirtilmeyen veya hiçbir sanal konağın hiçbir + adresi/portu ile eşleşmeyen istekleri yakalamak istersek...

+ + + Sunucu yapılandırması + + <VirtualHost _default_:*>
+ + DocumentRoot /siteler/default
+
+ </VirtualHost> +
+ +

Bütün portlarla eşleşen böyle bir öntanımlı sanal konağın kullanımı + hiçbir isteğin ana sunucuya gitmemesi sonucunu doğurur.

+ +

Bir öntanımlı sanal konak, asla, isme dayalı sanal konaklar için + kullanılmış bir adrese/porta gönderilmiş bir isteğe hizmet sunmaz. Eğer + istek bilinmeyen bir Host: başlığına sahipse veya hiç + Host: başlığı içermiyorsa isteğe daima ilk (yapılandırma + dosyasındaki ilk) isme dayalı sanal konak hizmet sunar.

+ +

Her isteği tek bir bilgilendirme sayfasına (veya betiğe) yönlendirmek + isterseniz AliasMatch veya + RewriteRule yönergesini + kullanabilirsiniz.

+
+ +
+ Farklı portlardan <code>_default_</code> + +

Önceki yapılandırmaya ek olarak 80. portta ayrı bir + _default_ sanal konağı kullanmak istersek...

+ + + Sunucu yapılandırması + + <VirtualHost _default_:80>
+ + DocumentRoot /siteler/default80
+ # ...
+
+ </VirtualHost>
+
+ <VirtualHost _default_:*>
+ + DocumentRoot /siteler/default
+ # ...
+
+ </VirtualHost> +
+ +

80. porttan hizmet sunan _default_ sanal konağı IP adresi + belirtilmeyen tüm istekleri yakalar, bunu yapabilmesi için yapılandırma + dosyasında tüm portlara hizmet sunan benzerinden önce yer almalıdır. Bu + durumda ana sunucu hiçbir isteğe yanıt vermeyecektir.

+
+ +
+ Tek portluk <code>_default_</code> + +

_default_ sanal konağının sadece 80. porttan hizmet + sunmasını istersek...

+ + + Sunucu yapılandırması + + <VirtualHost _default_:80>
+ DocumentRoot /siteler/default
+ ...
+ </VirtualHost> +
+ +

80. porttan gelen IP adresi belirtilmemiş isteklere + _default_ sanal konağı, diğer portlardan gelen adres + belirtilmemiş isteklere ise ana sunucu hizmet verecektir.

+
+ +
+ +
Bir isme dayalı sanal konağı bir IP’ye dayalı + sanal konakla yansılamak + +

İsme dayalı sanal konak örneklerinin 2. sinde adı + geçen falanca.dom bu örnekte kendi IP adresinden hizmet + veriyor olsun. İsme dayalı sanal konağı eski IP adresiyle kaydetmiş + vekiller ve isim sunucularından kaynaklanacak olası sorunlardan kaçınmak + için yansılama sırasında sanal konağı hem eski hem de yeni IP adresiyle + sunmamız lazım.

+ +

Çözüm kolay, çünkü yapacağımız sadece VirtualHost + yönergesine yeni IP adresini (192.168.2.2) eklemek olacak.

+ + + Sunucu yapılandırması + + Listen 80
+ ServerName mesela.dom
+ DocumentRoot /siteler/mesela
+
+ <VirtualHost 192.168.1.2>
+
+ <VirtualHost 192.168.1.2 192.168.2.2>
+ + DocumentRoot /siteler/falanca
+ ServerName falanca.dom
+ # ...
+
+ </VirtualHost>
+
+ <VirtualHost 192.168.1.2>
+ + DocumentRoot /siteler/faraza
+ ServerName faraza.dom
+ ServerAlias *.faraza.dom
+ # ...
+
+ </VirtualHost> +
+ +

Böylece sanal konağa hem yeni (bir IP’ye dayalı sanal konak olarak) + hem de eski adresinden (bir isme dayalı sanal konak olarak) + erişilebilecektir.

+ +
+ +
+ <code>ServerPath</code> yönergesinin kullanımı + +

İsme dayalı iki sanal konağı olan bir sunucumuz olsun. Doğru sanal + konağa erişebilmek için istemcinin doğru Host: başlığı + göndermesi gerekir. Eski HTTP/1.0 istemcileri böyle bir başlık + göndermedikleri için Apache istemcinin hangi sanal konağa erişmek + istediğini bilemez (ve isteğe ilk sanal konaktan hizmet sunar). Daha iyi + bir geriye uyumluluk sağlamak için isme dayalı sanal konağa bir önek + bağlantısı içeren bir bilgilendirme sayfası sunmak üzere yeni bir sanal + konak oluşturabiliriz.

+ + + Sunucu yapılandırması + + NameVirtualHost 172.20.30.40
+
+ <VirtualHost 172.20.30.40>
+ + # ilk sanal konak
+ DocumentRoot /siteler/baska
+ RewriteEngine On
+ RewriteRule ^/.* /siteler/baska/index.html
+ # ...
+
+ </VirtualHost>
+
+ <VirtualHost 172.20.30.40>
+ DocumentRoot /siteler/baska/bir
+ + ServerName bir.baska.tld
+ ServerPath /bir/
+ RewriteEngine On
+ RewriteRule ^(/bir/.*) /siteler/baska$1
+ # ...
+
+ </VirtualHost>
+
+ <VirtualHost 172.20.30.40>
+ + DocumentRoot /siteler/baska/iki
+ ServerName iki.baska.tld
+ ServerPath /iki/
+ RewriteEngine On
+ RewriteRule ^(/iki/.*) /siteler/baska$1
+ # ...
+
+ </VirtualHost> +
+ +

ServerPath yönergesinden dolayı + http://bir.baska.tld/bir/ şeklinde yapılan isteklere + daima “bir” sanal konağı hizmet sunacaktır.

+ +

http://bir.baska.tld/ şeklinde yapılan isteklere ise + istemcinin doğru Host: başlığı göndermesi şartıyla + “bir” sanal konağı hizmet sunacaktır. İstemci, bir + Host: başlığı göndermediği takdirde ilk konaktan bir + bilgilendirme sayfası alacaktır.

+ +

Yalnız buradaki bir tuhaflığa dikkat edin: Eğer istemci bir + Host: başlığı göndermeden + http://iki.baska.tld/bir/ şeklinde bir istek yaparsa bu + isteğe de “bir” sanal konağı hizmet sunacaktır.

+ +

RewriteRule yönergesi, bir + istemcinin, bir URL öneki belirtsin ya da belirtmesin doğru + Host: başlığı gönderdiğinden emin olmak için + kullanılmıştır.

+ +
+ +
diff --git a/docs/manual/vhosts/fd-limits.xml.tr b/docs/manual/vhosts/fd-limits.xml.tr new file mode 100644 index 0000000000..d766d64c4c --- /dev/null +++ b/docs/manual/vhosts/fd-limits.xml.tr @@ -0,0 +1,123 @@ + + + + + + + + + +Sanal Konaklar + Dosya Tanıtıcı Sınırları + + + +

Çok büyük sayıda sanal konak kullanıyorsanız ve bunların her biri için + ayrı günlük kayıtları tutuyorsanız, Apache dosya tanıtıcılarını + tüketebilir. Apache tarafından, dahili olarak 10-20 dosya tanıtıcıya ek + olarak her hata günlüğü için bir ve her diğer günlük kaydı için bir dosya + tanıcı kullanılır. Unix işletim sisteminde dosya tanıtıcıların sayısı + süreç başına 64 taneyle sınırlıdır ve gerekirse donanıma bağlı olarak + arttırılabilir.

+ +

Apache gerektiğinde bu sınırı kendisi arttırmaya çalışırsa da bu her + zaman mümkün olmaz. Şöyle ki:

+ +
    +
  1. Sisteminiz setrlimit() sistem çağrısını + sağlamıyordur.
  2. + +
  3. Sisteminizde setrlimit(RLIMIT_NOFILE) çağrısı hiçbir işe + yaramıyordur (örneğin, Solaris 2.3).
  4. + +
  5. Dosya tanıtıcılarının sayısı donanıma bağlı olarak daha fazla + arttırılamıyordur.
  6. + +
  7. Sisteminiz dosya tanıtıcı sayısını başka sınırlara bağlı kılmıştır: + örneğin stdio akımları ile ilgili sınır, dosya tanıtıcı sayısının + 256’nın altında ollmasını gerektiriyordur (Solaris 2).
  8. +
+ +

Böyle sorunlar karşısında yapabilecekleriniz:

+ +
  • Ana günlük dosyaları hariç, VirtualHost bölümlerinde günlük dosyası + belirtmeyerek günlük dosyası sayısını düşürürsünüz. (Bunun nasıl + yapılacağını öğrenmek için Günlük kayıtlarının + ayrıştırılması bölümüne bakınız.)
  • + +
  • Sisteminizde serbest dosya tanıtıcı sayısı 1-2 civarına düşerse + Apache’yi aşağıdaki gibi bir betikle yeniden çalıştırarak dosya + tanıtıcı sayısını arttırabilirsiniz: + + + #!/bin/sh
    + ulimit -S -n 100
    + exec httpd
    +
    +
  • +
+ +
+ +
Günlük kayıtlarının ayrıştırılması + +

Günlük dosyalarını çok sayıda sanal konak için ortak olarak + kullanıyorsanız, sanal konaklar için istatistiksel çözümlemeler yapmak + amacıyla sırası geldiğinde bunları ayrıştırabilirsiniz. Bu işlem aşağıda + anlatıldığı gibi yapılabilir.

+ +

İlk iş olarak, sanal konak bilgilerini günlük girdilerine eklemeniz + gerekir. Bu işlem, LogFormat yönergesi ve + %v biçem değişkeni ile yapılabilir. Günlük girdisi biçem + dizgesinin başına bunu ekleyiniz:

+ + + LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost
+ CustomLog logs/multiple_vhost_log vhost +
+ +

Bu yapılandırma ile her günlük kaydının başında sanal konağın + ServerName yönergesine belirtilen + ismi eklenir. (Günlük dosyalarınızın kişiselleştirilmesi ile ilgili daha + fazla bilgi için Günlük + Girdilerinin Kişiselleştirilmesi konusuna bakınız.)

+ +

Günlük dosyanızdaki kayıtları bileşenlere göre gruplamak isterseniz + split-logfile + programını kullanabilirsiniz. Bu programı Apache dağıtımının + support dizininde bulabilirsiniz.

+ +

Programı aşağıdaki gibi çalıştırın:

+ + + split-logfile < /logs/multiple_vhost_log + + +

Bu programı sanal konaklar için tuttuğunuz günlük dosyasının ismini + argüman olarak belirterek çalıştırdığınızda o dosyadaki kayıtlardan her + sanal konak için ayrı bir günlük dosyası + (konakadı.log) üretilir.

+ +
+
+ diff --git a/docs/manual/vhosts/mass.xml.tr b/docs/manual/vhosts/mass.xml.tr new file mode 100644 index 0000000000..95b4427b08 --- /dev/null +++ b/docs/manual/vhosts/mass.xml.tr @@ -0,0 +1,405 @@ + + + + + + + + + +Sanal Konaklar + Devingen olarak Yapılandırılan Kitlesel Sanal Barındırma + + + +

Bu belgede sanal konakların sonu belirsiz bir şekilde artışı karşısında + Apache httpd sunucusunun nasıl daha verimli kullanılacağı açıklanmıştır. +

+ +
+ +
Amaç + +

Burada açıklanan teknikler, httpd.conf dosyanızın + örnekteki gibi, aslında hemen hemen birbirinin aynı çok sayıda + <VirtualHost> bölümü içereceği zaman yapılacaklar ile + ilgilidir.

+ + +NameVirtualHost 111.22.33.44
+<VirtualHost 111.22.33.44>
+ + ServerName musteri-1.dom
+ DocumentRoot /siteler/musteri-1.dom/belgeler
+ ScriptAlias /cgi-bin/ /siteler/musteri-1.dom/cgi-bin
+
+</VirtualHost>
+<VirtualHost 111.22.33.44>
+ + ServerName musteri-2.dom
+ DocumentRoot /siteler/musteri-2.dom/belgeler
+ ScriptAlias /cgi-bin/ /siteler/musteri-2.dom/cgi-bin
+
+</VirtualHost>
+# blah blah blah
+<VirtualHost 111.22.33.44>
+ + ServerName musteri-N.dom
+ DocumentRoot /siteler/musteri-N.dom/belgeler
+ ScriptAlias /cgi-bin/ /siteler/musteri-N.dom/cgi-bin
+
+</VirtualHost> +
+ +

Ana fikir, tüm durağan <VirtualHost> + yapılandırmalarını devingen olarak çalışan tek bir + <VirtualHost> bölümüyle değiştirmektir. Bunun elbette + bazı getirileri olacaktır:

+ +
    +
  1. Yapılandırma dosyanız küçüleceği için Apache daha çabuk + başlatılabilecek ve daha az bellek harcayacaktır.
  2. + +
  3. Yeni sanal konakların eklenmesi, DNS’de yeni girdiler oluşturmak ve + dosya sisteminde bununla ilgili dizinleri açmak dışında biraz daha + basit olacaktır; en azından Apache’yi yeniden yapılandırmak ve yeniden + başlatmak zorunda kalmayacaksınız.
  4. +
+ +

Ana götürüsü ise her sanal konak için ayrı birer günlük dosyasına sahip + olamayacak olmanızdır. Öte yandan, dosya tanıtıcılarının sınırlı olması + nedeniyle bunu yapmayı zaten istemezsiniz. Günlük kayıtları için bir + fifo veya bir boru hattı oluşturmak ve diğer uçta çalışan bir süreç + vasıtasıyla günlükleri müşterilere paylaştırmak daha iyidir (ayrıca, bu, + istatistikleri toplamanızı da kolaylaştırır).

+ +
+ +
Genel Bakış + +

Bir sanal konak iki bilgiye bakarak belirlenir: IP adresi ve HTTP + isteğindeki Host: başlığının içeriği. Devingen sanal + barındırma tekniği, isteği yerine getirmek için kullanılacak dosya + yoluna bu bilgiyi kendiliğinden girmek esasına dayanır. Bu, Apache 2.0 + ile mod_vhost_alias kullanarak oldukça kolay + yapılabileceği gibi mod_rewrite da kullanılabilir. Bu + modüllerin her ikisi de öntanımlı olarak devre dışıdır. Bu tekniği + kullanmak isterseniz Apache’yi yeniden yapılandırıp derleyerek bu iki + modülü etkin duruma getirmeniz gerekir.

+ +

Devingen sanal konağı normal bir sanal konak gibi göstermek için bazı + şeyleri ’göstermelik’ olarak yapmak gerekir. Bunlardan en önemlisi, + Apache tarafından göreli URL’lerden normal URL’leri ve benzerlerini + üretmek için kullanılan sunucu ismidir. Sunucu ismi + ServerName yönergesi ile yapılandırılır ve CGI’ler + tarafından SERVER_NAME ortam değişkeni üzerinden + kullanılır. Çalışma anındaki asıl değer UseCanonicalName yönergesi tarafından denetlenir. + UseCanonicalName Off olduğunda sunucu ismi isteğin + Host: başlık alanından elde edilir. UseCanonicalName + DNS belirtilmişse, sunucu ismi, sanal konağın IP adresinden + tersine DNS sorgusu yapılarak elde edilir. Birincisi isme dayalı sanal + konaklar tarafından ikincisi ise IP’ye dayalı sanal konaklar tarafından + kullanılır. Eğer Apache, istekte Host: başlığının olmayışı + veya DNS sorgusunun başarısız olması sebebiyle sunucu ismini elde + edemezse son çare olarak ServerName yönergesinde yazılı + değeri kullanır.

+ +

‘Göstermelik’ yapılan şeylerden biri de DocumentRoot + yönergesi ile yapılandırılan belge kök dizini olup CGI’ler tarafından + DOCUMENT_ROOT ortam değişkeni üzerinden kullanılır. Normal + yapılandırmada core modülü tarafından dosya isimlerini + URI’lere eşlerken kullanılır. Fakat sunucu devingen sanal konakları + kullanmak üzere yapılandırıldığında, eşleştirmeyi farklı yollardan yapan + başka bir modül devreye girer (mod_vhost_alias veya + mod_rewrite). DOCUMENT_ROOT ortam değişkenine + değerini atamaktan sorumlu olan bu iki modülden biri kullanılmazsa CGI + veya SSI belgeleri yanlış değerlerle üretilirler.

+ +
+ +
Basit Devingen Sanal Konaklar + +

Yukarıda Amaç bölümünde özetlenen sanal konak + düzenlemesinin mod_vhost_alias kullanarak daha soysal bir + tarzda gerçekleştirilmiş halini içeren httpd.conf bölümü + aşağıdadır.

+ + +# sunucu ismini Host: başlığından elde edelim
+UseCanonicalName Off
+
+# Bu günlükleme biçiminde ilk alana bakarak
+# sanal konak günlükleri ayrıştırılabilir
+LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
+CustomLog logs/access_log vcommon
+
+# istekleri yerine getirmek için kullanılacak
+# dosya isimlerine sunucu ismini ekleyelim
+VirtualDocumentRoot /siteler/%0/belgeler
+VirtualScriptAlias /siteler/%0/cgi-bin +
+ +

Bu yapılandırmayı IP’ye dayalı sanal konaklar için kullanmak isterseniz + UseCanonicalName Off yerine UseCanonicalName + DNS yazmanız yeterlidir. Böylece dosya ismine eklenecek konak + ismi sanal konağın IP adresinden türetilir.

+ +
+ +
Sanal Kişisel Sayfalar Sistemi + +

Bu sistem, yukarıdaki yapılandırmanın bir ISS’nin kişisel sayfalar + sunucusuna uyarlanmasından başka bir şey değildir. Biraz daha karmaşık + bir yapılandırma ile dosya isimlerine /home/kullanıcı/ + dizinlerini ekleyebiliriz. Farklı olarak her sanal konak için bir tane + değil hepsi için bir tane cgi-bin olacaktır.

+ + +# Son bölüm hariç yukarıdaki yapılandırma, burada...
+
+# sunucu ismine eklenecek dosya isimlerini oluşturalım
+VirtualDocumentRoot /siteler/%2/belgeler
+
+# ortak cgi-bin dizini
+ScriptAlias /cgi-bin/ /siteler/std-cgi/
+
+ +

mod_vhost_alias belgesinde daha karmaşık + VirtualDocumentRoot örnekleri vardır.

+ +
+ +
Aynı Sunucuda Kişisel ve Kurumsal Sanal Konaklar + +

Daha karmaşık ayarlamalar yaparak Apache’inin normal + <VirtualHost> bölümlerini farklı kitlesel sanal konak + yapılandırmaları için kullanabilirsiniz. Örneğin, bireysel + müşterileriniz için bir IP adresiniz, kurumsal müşterileriniz için de + başka bir IP adresiniz olsun. Her biri için ayrı ayrı sanal konaklar + ayarlamak yerine aşağıdaki gibi bir yapılandırma kullanabilirsiniz:

+ + +UseCanonicalName Off
+
+LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
+
+<Directory /siteler/kurumsal>
+ + Options FollowSymLinks
+ AllowOverride All
+
+</Directory>
+
+<Directory /siteler/bireysel>
+ + Options FollowSymLinks
+ AllowOverride None
+
+</Directory>
+
+<VirtualHost 111.22.33.44>
+ + ServerName kurumsal.iss.dom
+
+ CustomLog logs/access_log.kurumsal vcommon
+
+ VirtualDocumentRoot /siteler/kurumsal/%0/belgeler
+ VirtualScriptAlias /siteler/kurumsal/%0/cgi-bin
+
+</VirtualHost>
+
+<VirtualHost 111.22.33.45>
+ + ServerName bireysel.iss.dom
+
+ CustomLog logs/access_log.bireysel vcommon
+
+ VirtualDocumentRoot /siteler/bireysel/%0/belgeler
+ ScriptAlias /cgi-bin/ /siteler/std-cgi/
+
+</VirtualHost> +
+ + Bilginize +

Eğer ilk <VirtualHost> bölümü bir ServerName yönergesi içermezse ilgili IP + için ters DNS sorgusu yapılır. Eğer sorgudan elde edilen isim + sunucunun ismi değilse bu istenmeyen duruma bir çözüm olarak bir + bilgilendirme bölümü (ServerName isimsiz.iss.dom) + eklenebilir.

+
+ +
+ +
IP’ye dayalı sanal konakları daha verimli kılmak + +

İlk örnekte IP’ye dayalı sanal konaklar için + kullanılmak istenirse yapılandırmada neyin nasıl değiştirileceği + belirtilmişti. Her istek için ayrı bir DNS sorgusu gerekeceğinden bu + başarım düşmesine yol açar. DNS sorgusu ihtiyacını ortadan kaldırmak + için, bir çözüm olarak dosya sistemi, konak isimleri yerine IP + adreslerine göre düzenlenebilir. Günlük kayıtları da IP adreslerine göre + ayrıştırılacak şekilde ayarlanabilir.

+ + +# Sunucu ismini IP adresinden ters DNS sorgusu ile elde edelim
+UseCanonicalName DNS
+
+# Günlük kayıtları IP adreslerine göre ayrıştırılabilsin
+LogFormat "%A %h %l %u %t \"%r\" %s %b" vcommon
+CustomLog logs/access_log vcommon
+
+# dosya isimleri IP adreslerini içersin
+VirtualDocumentRootIP /siteler/%0/belgeler
+VirtualScriptAliasIP /siteler/%0/cgi-bin
+
+ +
+ +
<code>mod_rewrite</code> ile Kurumsal Müşteriler Sistemi + +

Buradaki httpd.conf bölümü de ilk + örnekteki gibi elde edilmiştir. İlk yarı, bazı değişiklikler dışında + yukarıdaki örneğe çok benzer. Bu değişiklikler yapılandırmanın + mod_rewrite bölümünün düzgün çalışması ve geriye doğru + uyumluluk için gereklidir. İkinci yarı, asıl işi yapan + mod_rewrite yapılandırmasını içerir.

+ +

Biraz uzmanlık gerektiren bazı kısımlar var: Öntanımlı olarak + mod_rewrite diğer (mod_alias, vs. gibi) URI + dönüşüm modüllerinden önce çalışır. Dolayısıyla bu modülleri kullanmak + isterseniz, mod_rewrite’ı bunlara izin verecek şekilde + yapılandırmalısınız. Ayrıca her devingen sanal konağa eşdeğer bir + ScriptAlias yapmak için de biraz büyü yapmak gerekir.

+ + +# Sunucu ismini Host: başlığınıdan alalım.
+UseCanonicalName Off
+
+# Günlük dosyasından bilgileri ayıklayabilelim.
+LogFormat "%{Host}i %h %l %u %t \"%r\" %s %b" vcommon
+CustomLog logs/access_log vcommon
+
+<Directory /siteler/hosts>
+ + # ScriptAlias için yaptıklarımızla CGI betiklerini
+ # çalışmaya zorlayamayacağımızdan ExecCGI burada gerekli.
+ Options FollowSymLinks ExecCGI
+
+</Directory>
+
+# İşin zor yanına geldik.
+
+RewriteEngine On
+
+# Host: başlığından elde edilen sunucu isminde harf
+# büyüklükleri çeşitli olabilir. Hepsini küçük harf yapalım.
+RewriteMap lowercase int:tolower
+
+## önce normal belgelerle anlaşalım:
+# Alias /icons/ çalışsın - diğer rumuzlar için yineleyelim
+RewriteCond %{REQUEST_URI} !^/icons/
+# CGI’ler de çalışsın.
+RewriteCond %{REQUEST_URI} !^/cgi-bin/
+# Biraz da büyü yapalım.
+RewriteRule ^/(.*)$ /siteler/${lowercase:%{SERVER_NAME}}/belgeler/$1
+
+## Artık CGI’lerle anlaşabiliriz. - Bir eylemci isteyelim.
+RewriteCond %{REQUEST_URI} ^/cgi-bin/
+RewriteRule ^/(.*)$ /siteler/${lowercase:%{SERVER_NAME}}/cgi-bin/$1 [H=cgi-script]
+
+# Bu kadar! +
+ +
+ +
<code>mod_rewrite</code> ile Kişisel Sayfalar Sistemi + +

Burada da ikinci örnekte yaptıklarımızı + yapıyoruz.

+ + +RewriteEngine on
+
+RewriteMap lowercase int:tolower
+
+# CGI’ler çalışsın.
+RewriteCond %{REQUEST_URI} !^/cgi-bin/
+
+# konak ismi doğru mu bakalım yoksa RewriteRule çalışmaz.
+RewriteCond ${lowercase:%{SERVER_NAME}} ^www\.[a-z-]+\.isp\.dom$
+
+# URI’nin başına sanal konak ismini ekleyelim.
+# [C], bunu bitirdikten sonra, sonraki rewrite ile devam et demek.
+RewriteRule ^(.+) ${lowercase:%{SERVER_NAME}}$1 [C]
+
+# Artık asıl dosya ismini oluşturabiliriz.
+RewriteRule ^www\.([a-z-]+)\.isp\.dom/(.*) /home/$1/$2
+
+# Ortak CGI dizinini tanımlayalım.
+ScriptAlias /cgi-bin/ /siteler/std-cgi/ +
+ +
+ +
Sanal konaklar için ayrı bir yapılandırma dosyası kullanmak + +

Burada, sanal konak isimlerinden belge kök dizini elde ederken + mod_rewrite modülünün daha gelişkin özelliklerinden + yararlanarak isimleri ayrı bir dosyadan okutacağız. Bu, esnekliği + artırır ama daha karmaşık bir yapılandırma gerekir.

+ +

Aşağıdaki içeriğe sahip bir vhost.mapdosyamız olsun:

+ + +musteri-1.dom /siteler/kurumsal/1
+musteri-2.dom /siteler/kurumsal/2
+# ...
+musteri-N.dom /siteler/kurumsal/N
+
+ +

httpd.conf dosyamız da şunları içerecektir:

+ + +RewriteEngine on
+
+RewriteMap lowercase int:tolower
+
+# Eşlem dosyasını tanımlayalım
+RewriteMap vhost txt:/siteler/conf/vhost.map
+
+# Rumuzları yukarıdaki gibi halledelim.
+RewriteCond %{REQUEST_URI} !^/icons/
+RewriteCond %{REQUEST_URI} !^/cgi-bin/
+RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$
+# Eşlemeyi dosyalar için de yapalım.
+RewriteCond ${vhost:%1} ^(/.*)$
+RewriteRule ^/(.*)$ %1/belgeler/$1
+
+RewriteCond %{REQUEST_URI} ^/cgi-bin/
+RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$
+RewriteCond ${vhost:%1} ^(/.*)$
+RewriteRule ^/(.*)$ %1/cgi-bin/$1 [H=cgi-script] +
+ +
+
-- 2.40.0