| <?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: 1746871 --> |
| <!-- ===================================================== |
| Translated by: Nilgün Belma Bugüner <nilgun belgeler.gen.tr> |
| Reviewed by: Orhan Berent <berent belgeler.gen.tr> |
| ========================================================== --> |
| |
| <!-- |
| 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="examples.xml.meta"> |
| <parentdocument href="./">Sanal Konaklar</parentdocument> |
| <title>Sanal Konak Örnekleri</title> |
| |
| <summary> |
| |
| <p>Bu belgede <a href="index.html">sanal konaklarla</a> ile ilgili olarak |
| karşılaşılması olası tüm senaryolara yer verilmeye çalışılmıştır. |
| Buradaki senaryolar, tek bir sunucu üzerinde <a href="name- |
| based.html">isme dayalı</a> veya <a href="ip-based.html">IP’ye dayalı</a> |
| sanal konaklar aracılığıyla çok sayıda sitenin sunumu ile ilgilidir. |
| </p> |
| |
| </summary> |
| |
| <section id="purename"> |
| <title>Tek bir IP ile çok sayıda isme dayalı site</title> |
| |
| <p>Bu örnekte, makinenizin tek bir IP adresine çözümlenen çok sayıda konak |
| adına sahip olduğunu, <code>example.com</code> ve |
| <code>example.org</code> gibi farklı isimlere farklı yanıtlar vermek |
| istediğinizi varsayalım.</p> |
| |
| <note><title>Bilginize</title><p>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 <code>hosts</code> dosyanıza |
| yazabilirsiniz. Fakat bu sadece sizin makinenizde çalışır. Yerel |
| ağınızdaki her makinenin <code>hosts</code> 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.</p> |
| </note> |
| |
| <highlight language="config"> |
| # Apache’nin 80. portu dinlediğinden emin olalım |
| Listen 80 |
| <VirtualHost *:80> |
| DocumentRoot "/siteler/ecom" |
| ServerName example.com |
| |
| # Diğer yönergeler, burada ... |
| </VirtualHost> |
| |
| <VirtualHost *:80> |
| DocumentRoot "/siteler/eorg" |
| ServerName example.org |
| |
| # Diğer yönergeler, burada ... |
| </VirtualHost> |
| </highlight> |
| |
| <p>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. Yapılandırma |
| dosyasındaki <code>ServerName example.com</code> yönergeli konak, ilk |
| sanal konak olduğundan en yüksek önceliğe sahiptir ve |
| <cite>öntanımlı</cite> veya <cite>baskın</cite> site olarak davranır. |
| Yani, hiçbir <directive module="core">ServerName</directive> yönergesi |
| ile eşleşmeyen bir istek alındığında bu istek ilk <directive |
| type="section" module="core">VirtualHost</directive> yapılandırması ile |
| karşılanır.</p> |
| |
| <p>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 adres veya portlardan sunma gereğiyle |
| karşılaşmaktır.</p> |
| |
| <note><title>Bilginize</title> |
| <p><code>*</code> yerine sisteminizdeki belli bir IP adresini |
| yazabilirsiniz. Böyle sanal konaklar sadece, HTTP isteklerinin sadece |
| belirtilen IP adreslerinden alınması için kullanilabilir.</p> |
| |
| <highlight language="config"> |
| NameVirtualHost 192.168.1.22 |
| |
| <VirtualHost 192.168.1.22> |
| # vs. ... |
| </VirtualHost> |
| </highlight> |
| |
| <p>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 <code>*</code> 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.</p> |
| </note> |
| |
| </section> |
| |
| <section id="twoips"> |
| <title>IP adresleri farklı çok sayıda isme dayalı site</title> |
| |
| <note><title>Bilginize</title> |
| <p>Burada açıklanan teknikler istendiği kadar çok IP adresine |
| genişletilebilir.</p> |
| </note> |
| |
| <p>Sunucunun iki IP adresi olsun. Birinden "ana sunucu" |
| (<code>192.168.1.2</code>) diğerinden <code>example.com</code> |
| <code>192.168.2.2</code> hizmet versin. Bu arada başka sanal konakları |
| da sunabilelim istiyoruz.</p> |
| |
| <highlight language="config"> |
| Listen 80 |
| |
| # Bu, 192.168.1.2 adresindeki "ana sunucu" olsun |
| ServerName sunucu.example.com |
| DocumentRoot "/siteler/anasunucu" |
| |
| <VirtualHost 192.168.1.20> |
| DocumentRoot "/siteler/ecom" |
| ServerName example.com |
| |
| # Diğer yönergeler, burada ... |
| </VirtualHost> |
| |
| <VirtualHost 192.168.1.20> |
| DocumentRoot "/siteler/eorg" |
| ServerName example.org |
| |
| # Diğer yönergeler, burada ... |
| </VirtualHost> |
| </highlight> |
| |
| <p><code>192.168.1.20</code> adresinden gelmeyen tüm isteklere ana sunucu |
| (<code>sunucu.example.com</code>), <code>192.168.1.20</code> adresinden |
| gelen sunucu ismi belirtmeyenler ile <code>Host:</code> başlığı |
| belirtmeyenlere ise <code>example.com</code> hizmet verecektir.</p> |
| |
| </section> |
| |
| <section id="intraextra"><title>Aynı içeriği farklı IP adresleriyle sunmak |
| (örn., dahili ve harici ağlara)</title> |
| |
| <p>Sunucu makine iki IP adresine sahip olsun. Biri iç ağa |
| (<code>192.168.1.1</code>) diğeri dış ağa (<code>172.20.30.40</code>) |
| bakıyor olsun. <code>sunucu.example.com</code> ismi dış ağda dış ağa |
| bakan IP’ye, iç ağda ise iç ağa bakan IP’ye çözümleniyor olsun.</p> |
| |
| <p>Bu durumda, sunucu hem iç hem de dış ağdan gelen isteklere aynı içerik, |
| dolayısıyla aynı <directive type="section" module="core" |
| >VirtualHost</directive> bölümü ile hizmet verebilir.</p> |
| |
| <highlight language="config"> |
| <VirtualHost 192.168.1.1 172.20.30.40> |
| DocumentRoot "/siteler/sunucu" |
| ServerName sunucu.example.com |
| ServerAlias sunucu |
| </VirtualHost> |
| </highlight> |
| |
| <p>Artık, hem iç hem de dış ağdan gelen isteklere aynı |
| <directive type="section" module="core">VirtualHost</directive> |
| bölümünden hizmet sunulacaktır.</p> |
| |
| <note><title>Bilginize:</title> |
| <p>İç ağdan istek yapan biri, tam nitelenmiş konak ismi |
| <code>sunucu.example.com</code> yerine makine ismini |
| (<code>sunucu</code>) kullanabilir (<code>ServerAlias sunucu</code> |
| satırına dikkat).</p> |
| |
| <p>Ayrıca, yukarıdaki gibi iki ayrı IP adresi belirtmek yerine sadece |
| <code>*</code> belirtmekle sunucunun tüm IP adreslerine yine aynı |
| içerikle yanıt vereceğine dikkat ediniz.</p> |
| </note> |
| |
| </section> |
| |
| <section id="port"><title>Farklı portlarla farklı siteler</title> |
| |
| <p>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. Aşağıdaki örnekte, isim eşleşmesinin, en iyi eşleşen IP |
| adresi ve port çifti saptandıktan sonra yer alması gösterilmiştir. </p> |
| |
| <highlight language="config"> |
| Listen 80 |
| Listen 8080 |
| |
| <VirtualHost 172.20.30.40:80> |
| ServerName example.com |
| DocumentRoot "/siteler/ecom-80" |
| </VirtualHost> |
| |
| <VirtualHost 172.20.30.40:8080> |
| ServerName example.com |
| DocumentRoot "/siteler/ecom-8080" |
| </VirtualHost> |
| |
| <VirtualHost 172.20.30.40:80> |
| ServerName example.org |
| DocumentRoot "/siteler/eorg-80" |
| </VirtualHost> |
| |
| <VirtualHost 172.20.30.40:8080> |
| ServerName example.org |
| DocumentRoot "/siteler/eorg-8080" |
| </VirtualHost> |
| </highlight> |
| |
| </section> |
| |
| <section id="ip"><title>IP’ye dayalı sanal konaklar</title> |
| |
| <p>Sunucu makinenin, biri <code>example.com</code> adından çözümlenen |
| <code>172.20.30.40</code>, diğeri <code>example.org</code> adından |
| çözümlenen <code>172.20.30.50</code> diye iki IP adresi olsun.</p> |
| |
| <highlight language="config"> |
| Listen 80 |
| |
| <VirtualHost 172.20.30.40> |
| DocumentRoot "/siteler/ecom" |
| ServerName example.com |
| </VirtualHost> |
| |
| <VirtualHost 172.20.30.50> |
| DocumentRoot "/siteler/eorg" |
| ServerName example.org |
| </VirtualHost> |
| </highlight> |
| |
| <p><code><VirtualHost></code> yönergelerinde belirtilmeyen |
| adreslerle yapılan isteklere (örneğin, <code>localhost</code>) sunucu |
| genelindeki yapılandırma ile ana sunucu yanıt verecektir.</p> |
| </section> |
| |
| <section id="ipport"> |
| <title>Hem IP’ye hem de porta dayalı sanal konaklar</title> |
| |
| <p>Sunucu makinenin, biri <code>example.com</code> adından çözümlenen |
| <code>172.20.30.40</code>, diğeri <code>example.org</code> adından |
| çözümlenen <code>172.20.30.50</code> diye iki IP adresi olsun ve iki |
| konak da hem 80 hem de 8080 portlarında çalışsınlar istiyoruz.</p> |
| |
| <highlight language="config"> |
| 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/ecom-80" |
| ServerName example.com |
| </VirtualHost> |
| |
| <VirtualHost 172.20.30.40:8080> |
| DocumentRoot "/siteler/ecom-8080" |
| ServerName example.com |
| </VirtualHost> |
| |
| <VirtualHost 172.20.30.50:80> |
| DocumentRoot "/siteler/eorg-80" |
| ServerName example.org |
| </VirtualHost> |
| |
| <VirtualHost 172.20.30.50:8080> |
| DocumentRoot "/siteler/eorg-8080" |
| ServerName example.org |
| </VirtualHost> |
| </highlight> |
| |
| </section> |
| |
| <section id="mixed"> |
| <title>Hem isme hem de IP‘ye dayalı sanal konaklar</title> |
| |
| <p>Bir <code>VirtualHost</code> yönergesinde belirtilen bir IP adresi başka |
| bir sanal konakta görünmüyorsa bu sankon kesinlikle IP'ye dayalı bir |
| sanal konaktır.</p> |
| |
| <highlight language="config"> |
| Listen 80 |
| |
| <VirtualHost 172.20.30.40> |
| DocumentRoot "/siteler/ecom" |
| ServerName example.com |
| </VirtualHost> |
| |
| <VirtualHost 172.20.30.40> |
| DocumentRoot "/siteler/eorg" |
| ServerName example.org |
| </VirtualHost> |
| |
| <VirtualHost 172.20.30.40> |
| DocumentRoot "/siteler/enet" |
| ServerName example.net |
| </VirtualHost> |
| |
| # IP'ye dayalı |
| <VirtualHost 172.20.30.50> |
| DocumentRoot "/siteler/eedu" |
| ServerName example.edu |
| </VirtualHost> |
| |
| <VirtualHost 172.20.30.60> |
| DocumentRoot "/siteler/egov" |
| ServerName example.gov |
| </VirtualHost> |
| </highlight> |
| |
| </section> |
| |
| <section id="proxy"><title><code>Virtualhost</code> ve |
| <code>mod_proxy</code>’nin birlikte kullanımı</title> |
| |
| <p>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. <code>192.168.111.2</code> 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 <directive |
| module="mod_proxy" name="ProxyPreserveHost">ProxyPreserveHost |
| On</directive> yönergesini kullandık.</p> |
| |
| <highlight language="config"> |
| <VirtualHost *:*> |
| ProxyPreserveHost On |
| ProxyPass "/" "http://192.168.111.2/" |
| ProxyPassReverse "/" "http://192.168.111.2/" |
| ServerName konak.example.com |
| </VirtualHost> |
| </highlight> |
| |
| </section> |
| |
| <section id="default"><title><code>_default_</code> sanal konakları</title> |
| |
| <section id="defaultallports"> |
| <title>Tüm portlar için <code>_default_</code></title> |
| |
| <p>Bir IP adresi ve port belirtilmeyen veya hiçbir sanal konağın hiçbir |
| adresi/portu ile eşleşmeyen istekleri yakalamak istersek...</p> |
| |
| <highlight language="config"> |
| <VirtualHost _default_:*> |
| DocumentRoot "/siteler/default" |
| </VirtualHost> |
| </highlight> |
| |
| <p>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.</p> |
| |
| <p>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 <code>Host:</code> başlığına sahipse veya hiç |
| <code>Host:</code> başlığı içermiyorsa isteğe daima ilk (yapılandırma |
| dosyasındaki ilk) isme dayalı sanal konak hizmet sunar.</p> |
| |
| <p>Her isteği tek bir bilgilendirme sayfasına (veya betiğe) yönlendirmek |
| isterseniz <directive module="mod_alias">AliasMatch</directive> veya |
| <directive module="mod_rewrite">RewriteRule</directive> yönergesini |
| kullanabilirsiniz.</p> |
| </section> |
| |
| <section id="defaultdifferentports"> |
| <title>Farklı portlardan <code>_default_</code></title> |
| |
| <p>Önceki yapılandırmaya ek olarak 80. portta ayrı bir |
| <code>_default_</code> sanal konağı kullanmak istersek...</p> |
| |
| <highlight language="config"> |
| <VirtualHost _default_:80> |
| DocumentRoot "/siteler/default80" |
| # ... |
| </VirtualHost> |
| |
| <VirtualHost _default_:*> |
| DocumentRoot "/siteler/default" |
| # ... |
| </VirtualHost> |
| </highlight> |
| |
| <p>80. porttan hizmet sunan <code>_default_</code> 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.</p> |
| </section> |
| |
| <section id="defaultoneport"> |
| <title>Tek portluk <code>_default_</code></title> |
| |
| <p><code>_default_</code> sanal konağının sadece 80. porttan hizmet |
| sunmasını istersek...</p> |
| |
| <highlight language="config"> |
| <VirtualHost _default_:80> |
| DocumentRoot "/siteler/default" |
| ... |
| </VirtualHost> |
| </highlight> |
| |
| <p>80. porttan gelen IP adresi belirtilmemiş isteklere |
| <code>_default_</code> sanal konağı, diğer portlardan gelen adres |
| belirtilmemiş isteklere ise ana sunucu hizmet verecektir.</p> |
| |
| <p>Bir sanal konak bildiriminde <code>*</code> kullanımı |
| <code>_default_</code> kullanımından daha yüksek öncelik sağlar.</p> |
| </section> |
| |
| </section> |
| |
| <section id="migrate"><title>Bir isme dayalı sanal konağı bir IP’ye dayalı |
| sanal konakla yansılamak</title> |
| |
| <p>İsme dayalı sanal konak örneklerinin <a href="#twoips">2. sinde</a> adı |
| geçen <code>example.org</code> 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.</p> |
| |
| <p>Çözüm kolay, çünkü yapacağımız sadece <code>VirtualHost</code> |
| yönergesine yeni IP adresini (<code>192.168.1.2</code>) eklemek |
| olacak.</p> |
| |
| <highlight language="config"> |
| Listen 80 |
| ServerName example.com |
| DocumentRoot "/siteler/ecom" |
| |
| <VirtualHost 192.168.1.20 192.168.1.2> |
| DocumentRoot "/siteler/eorg" |
| ServerName example.org |
| # ... |
| </VirtualHost> |
| |
| <VirtualHost 192.168.1.20> |
| DocumentRoot "/siteler/enet" |
| ServerName example.enet |
| ServerAlias *.example.net |
| # ... |
| </VirtualHost> |
| </highlight> |
| |
| <p>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.</p> |
| |
| </section> |
| |
| <section id="serverpath"> |
| <title><code>ServerPath</code> yönergesinin kullanımı</title> |
| |
| <p>İsme dayalı iki sanal konağı olan bir sunucumuz olsun. Doğru sanal |
| konağa erişebilmek için istemcinin doğru <code>Host:</code> 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.</p> |
| |
| <highlight language="config"> |
| <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> |
| </highlight> |
| |
| <p><directive module="core">ServerPath</directive> yönergesinden dolayı |
| <code>http://bir.baska.tld/bir/</code> şeklinde yapılan isteklere |
| <em>daima</em> “bir” sanal konağı hizmet sunacaktır.</p> |
| |
| <p><code>http://bir.baska.tld/</code> şeklinde yapılan isteklere ise |
| istemcinin doğru <code>Host:</code> başlığı göndermesi şartıyla |
| “bir” sanal konağı hizmet sunacaktır. İstemci, bir |
| <code>Host:</code> başlığı göndermediği takdirde ilk konaktan bir |
| bilgilendirme sayfası alacaktır.</p> |
| |
| <p>Yalnız buradaki bir tuhaflığa dikkat edin: Eğer istemci bir |
| <code>Host:</code> başlığı göndermeden |
| <code>http://iki.baska.tld/bir/</code> şeklinde bir istek yaparsa bu |
| isteğe de “bir” sanal konağı hizmet sunacaktır.</p> |
| |
| <p><directive module="mod_rewrite">RewriteRule</directive> yönergesi, bir |
| istemcinin, bir URL öneki belirtsin ya da belirtmesin doğru |
| <code>Host:</code> başlığı gönderdiğinden emin olmak için |
| kullanılmıştır.</p> |
| |
| </section> |
| |
| </manualpage> |