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: 1132802:1673930 (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="examples.xml.meta">
28 <parentdocument href="./">Sanal Konaklar</parentdocument>
29 <title>Sanal Konak Örnekleri</title>
33 <p>Bu belgede <a href="index.html">sanal konaklarla</a> ile ilgili olarak
34 karşılaşılması olası tüm senaryolara yer verilmeye çalışılmıştır.
35 Buradaki senaryolar, tek bir sunucu üzerinde <a href="name-
36 based.html">isme dayalı</a> veya <a href="ip-based.html">IP’ye dayalı</a>
37 sanal konaklar aracılığıyla çok sayıda sitenin sunumu ile ilgilidir.
42 <section id="purename">
43 <title>Tek bir IP ile çok sayıda isme dayalı site</title>
45 <p>Bu örnekte, makinenizin tek bir IP adresine sahip olduğunu ve bu
46 makineye <code>mesela.dom</code> ve <code>faraza.dom</code> şeklinde
47 (DNS A kayıtları sayesinde) farklı isimlerle erişilebildiğini
50 <note><title>Bilginize</title><p>Apache sunucusu üzerinde sanal konakları
51 yapılandırmakla bu konak isimleri için sihirli bir şekilde DNS
52 kayıtlarının da oluşturulmasını sağlamış olmazsınız. Bu isimler için
53 ilgili DNS kayıtlarında sizin IP adresinize çözümlenen A kayıtlarının
54 olması gerekir, yoksa sitenize kimse erişemez. Sitelere erişimi yerel
55 olarak denemek isterseniz, bu girdileri <code>hosts</code> dosyanıza
56 yazabilirsiniz. Fakat bu sadece sizin makinenizde çalışır. Yerel
57 ağınızdaki her makinenin <code>hosts</code> dosyasına bu girdileri
58 yazarak yerel ağdan erişimi bu yolla sağlayabilirsiniz ama dış ağdan
59 gelecek ziyaretçileriniz için DNS kayıtlarınızın olması şarttır.</p>
62 <example><title>Sunucu yapılandırması</title>
64 # Apache’nin 80. portu dinlediğinden emin olalım<br />
67 <VirtualHost *:80><br />
69 DocumentRoot /siteler/mesela<br />
70 ServerName mesela.dom<br />
72 # Diğer yönergeler, burada ...<br />
75 </VirtualHost><br />
77 <VirtualHost *:80><br />
79 DocumentRoot /siteler/faraza<br />
80 ServerName faraza.dom<br />
82 # Diğer yönergeler, burada ...<br />
88 <p>Yıldız imleri tüm adreslerle eşleşmeyi sağladığından ana sunucu
89 (yapılandırma dosyası genelindeki yapılandırma - sunucu geneli)
90 erişilebilir olmayacaktır. Yapılandırma
91 dosyasındaki <code>ServerName mesela.dom</code> yönergeli konak, ilk
92 sanal konak olduğundan en yüksek önceliğe sahiptir ve
93 <cite>öntanımlı</cite> veya <cite>baskın</cite> site olarak davranır.
94 Yani, hiçbir <code>ServerName</code> yönergesi ile eşleşmeyen bir istek
95 alındığında bu istek ilk <code>VirtualHost</code> yapılandırması ile
98 <note><title>Bilginize</title>
99 <p>IP adresi ve porta dayalı ayrımı umursamıyorsanız, <code>*</code>
100 yerine kendi IP adresinizi yazabilirsiniz.</p>
103 NameVirtualHost 192.168.1.22<br />
105 <VirtualHost 192.168.1.22><br />
109 <p>Bununla birlikte, IP adresinin önceden kestirilebilir olmadığı
110 sistemlerde, örneğin, hizmet sağlayıcınıza çevirmeli ağ ile bağlanıyor
111 ve onun rasgele atadığı bir IP adresi için bir devingen DNS çözümü
112 kullanıyorsanız, IP adresi değil de <code>*</code> kullanmak daha çok
113 işinize yarayacaktır. Yıldız imi her IP adresi ile eşleşeceğinden IP
114 adresiniz değişse bile bu yapılandırmayı değiştirmeden
115 kullanabilirsiniz.</p>
118 <p>Yukarıdaki yapılandırmayı hemen hemen tüm isme dayalı sanal konaklar
119 için kullanabilirsiniz. Bu yapılandırmanın çalışmayacağı tek durum,
120 farklı içerikleri farklı IP adreslerinden sunma gereğiyle
125 <section id="twoips">
126 <title>IP adresleri farklı çok sayıda isme dayalı site</title>
128 <note><title>Bilginize</title>
129 <p>Burada açıklanan teknikler istendiği kadar çok IP adresine
130 genişletilebilir.</p>
133 <p>Sunucunun iki IP adresi olsun. Birinden "ana sunucu"
134 (<code>192.168.1.2</code>) diğerinden <code>mesela.dom</code>
135 <code>192.168.2.2</code> hizmet versin. Bu arada başka sanal konakları
136 da sunabilelim istiyoruz.</p>
138 <example><title>Sunucu yapılandırması</title>
142 # Bu, 192.168.1.2 adresindeki "ana sunucu" olsun<br />
143 ServerName sunucu.faraza.dom<br />
144 DocumentRoot /siteler/anasunucu<br />
146 <VirtualHost 192.168.2.2><br />
148 DocumentRoot /siteler/mesela<br />
149 ServerName mesela.dom<br />
151 # Diğer yönergeler, burada ...<br />
154 </VirtualHost><br />
156 <VirtualHost 192.168.2.2><br />
158 DocumentRoot /siteler/falanca<br />
159 ServerName falanca.dom<br />
161 # Diğer yönergeler, burada ...<br />
167 <p><code>192.168.2.2</code> adresinden gelmeyen tüm isteklere ana sunucu
168 (<code>sunucu.faraza.dom</code>), <code>192.168.2.2</code> adresinden
169 gelen sunucu ismi belirtmeyenler ile <code>Host:</code> başlığı
170 belirtmeyenlere ise <code>mesela.dom</code> hizmet verecektir.</p>
174 <section id="intraextra"><title>Aynı içeriği farklı IP adresleriyle sunmak
175 (örn., dahili ve harici ağlara)</title>
177 <p>Sunucu makine iki IP adresine sahip olsun. Biri iç ağa
178 (<code>192.168.1.1</code>) diğeri dış ağa (<code>172.20.30.40</code>)
179 bakıyor olsun. <code>sunucu.mesela.dom</code> ismi dış ağda dış ağa
180 bakan IP’ye, iç ağda ise iç ağa bakan IP’ye çözümleniyor olsun.</p>
182 <p>Bu durumda, sunucu hem iç hem de dış ağdan gelen isteklere aynı içerik,
183 dolayısıyla aynı <code>VirtualHost</code> bölümü ile hizmet
186 <example><title>Sunucu yapılandırması</title>
188 <VirtualHost 192.168.1.1 172.20.30.40><br />
190 DocumentRoot /siteler/sunucu<br />
191 ServerName sunucu.mesela.dom<br />
192 ServerAlias sunucu<br />
197 <p>Artık, hem iç hem de dış ağdan gelen isteklere aynı
198 <code>VirtualHost</code> bölümünden hizmet sunulacaktır.</p>
200 <note><title>Bilginize:</title>
201 <p>İç ağdan istek yapan biri, tam nitelenmiş konak ismi
202 <code>sunucu.mesela.dom</code> yerine makine ismini
203 (<code>sunucu</code>) kullanabilir (<code>ServerAlias sunucu</code>
204 satırına dikkat).</p>
206 <p>Ayrıca, yukarıdaki gibi iki ayrı IP adresi belirtmek yerine sadece
207 <code>*</code> belirtmekle sunucunun tüm IP adreslerine yine aynı
208 içerikle yanıt vereceğine dikkat ediniz.</p>
213 <section id="port"><title>Farklı portlarla farklı siteler</title>
215 <p>Aynı IP adresine sahip çok sayıda konak ismine sahip olduğunuzu ve
216 bunların bazılarının farklı portları kullanmasını istediğinizi
217 varsayalım. Aşağıdaki örnekte, isim eşleşmesinin, en iyi eşleşen IP
218 adresi ve port çifti saptandıktan sonra yer alması gösterilmiştir. </p>
220 <example><title>Sunucu yapılandırması</title>
225 <VirtualHost 172.20.30.40:80><br />
227 ServerName mesela.dom<br />
228 DocumentRoot /siteler/mesela-80<br />
230 </VirtualHost><br />
232 <VirtualHost 172.20.30.40:8080><br />
234 ServerName mesela.dom<br />
235 DocumentRoot /siteler/mesela-8080<br />
237 </VirtualHost><br />
239 <VirtualHost 172.20.30.40:80><br />
241 ServerName faraza.dom<br />
242 DocumentRoot /siteler/faraza-80<br />
244 </VirtualHost><br />
246 <VirtualHost 172.20.30.40:8080><br />
248 ServerName faraza.dom<br />
249 DocumentRoot /siteler/faraza-8080<br />
256 <section id="ip"><title>IP’ye dayalı sanal konaklar</title>
258 <p>Sunucu makinenin, biri <code>mesela.dom</code> adından çözümlenen
259 <code>172.20.30.40</code>, diğeri <code>faraza.dom</code> adından
260 çözümlenen <code>172.20.30.50</code> diye iki IP adresi olsun.</p>
262 <example><title>Sunucu yapılandırması</title>
266 <VirtualHost 172.20.30.40><br />
268 DocumentRoot /siteler/mesela<br />
269 ServerName mesela.dom<br />
271 </VirtualHost><br />
273 <VirtualHost 172.20.30.50><br />
275 DocumentRoot /siteler/faraza<br />
276 ServerName faraza.dom<br />
281 <p><code><VirtualHost></code> yönergelerinde belirtilmeyen
282 adreslerle yapılan isteklere (örneğin, <code>localhost</code>) sunucu
283 genelindeki yapılandırma ile ana sunucu yanıt verecektir.</p>
286 <section id="ipport">
287 <title>Hem IP’ye hem de porta dayalı sanal konaklar</title>
289 <p>Sunucu makinenin, biri <code>mesela.dom</code> adından çözümlenen
290 <code>172.20.30.40</code>, diğeri <code>faraza.dom</code> adından
291 çözümlenen <code>172.20.30.50</code> diye iki IP adresi olsun ve iki
292 konak da hem 80 hem de 8080 portlarında çalışsınlar istiyoruz.</p>
294 <example><title>Sunucu yapılandırması</title>
296 Listen 172.20.30.40:80<br />
297 Listen 172.20.30.40:8080<br />
298 Listen 172.20.30.50:80<br />
299 Listen 172.20.30.50:8080<br />
301 <VirtualHost 172.20.30.40:80><br />
303 DocumentRoot /siteler/mesela-80<br />
304 ServerName mesela.dom<br />
306 </VirtualHost><br />
308 <VirtualHost 172.20.30.40:8080><br />
310 DocumentRoot /siteler/mesela-8080<br />
311 ServerName mesela.dom<br />
313 </VirtualHost><br />
315 <VirtualHost 172.20.30.50:80><br />
317 DocumentRoot /siteler/faraza-80<br />
318 ServerName faraza.dom<br />
320 </VirtualHost><br />
322 <VirtualHost 172.20.30.50:8080><br />
324 DocumentRoot /siteler/faraza-8080<br />
325 ServerName faraza.dom<br />
333 <title>Hem isme hem de IP‘ye dayalı sanal konaklar</title>
335 <p>Bir <code>VirtualHost</code> yönergesinde belirtilen bir IP adresi başka
336 bir sanal konakta görünmüyorsa bu sankon kesinlikle IP'ye dayalı bir
339 <example><title>Sunucu yapılandırması</title>
343 <VirtualHost 172.20.30.40><br />
345 DocumentRoot /siteler/mesela<br />
346 ServerName mesela.dom<br />
348 </VirtualHost><br />
350 <VirtualHost 172.20.30.40><br />
352 DocumentRoot /siteler/faraza<br />
353 ServerName faraza.dom<br />
355 </VirtualHost><br />
357 <VirtualHost 172.20.30.40><br />
359 DocumentRoot /siteler/falanca<br />
360 ServerName falanca.dom<br />
362 </VirtualHost><br />
365 <VirtualHost 172.20.30.50><br />
367 DocumentRoot /siteler/filanca<br />
368 ServerName filanca.dom<br />
370 </VirtualHost><br />
372 <VirtualHost 172.20.30.60><br />
374 DocumentRoot /siteler/fesmekan<br />
375 ServerName fesmekan.dom<br />
382 <section id="proxy"><title><code>Virtualhost</code> ve
383 <code>mod_proxy</code>’nin birlikte kullanımı</title>
385 <p>Bu örnekte bir arabirimi dışarıya bakan bir makinede, başka bir
386 makinede çalışan bir sunucuya sanal konak olarak, bir vekil sunucu
387 çalıştırmak istediğimizi varsayıyoruz. <code>192.168.111.2</code> IP
388 adresli bir makinede aynı isimde bir sanal konak yapılandırılmış olsun.
389 Çok sayıda konak ismi için vekil olarak tek bir makine kullandığımızdan
390 ve konak isminin de aktarılmasını arzuladığımızdan <directive
391 module="mod_proxy">ProxyPreserveHost On</directive> yönergesini
395 <VirtualHost *:*><br />
397 ProxyPreserveHost On<br />
398 ProxyPass / http://192.168.111.2/<br />
399 ProxyPassReverse / http://192.168.111.2/<br />
400 ServerName konak.mesela.dom<br />
407 <section id="default"><title><code>_default_</code> sanal konakları</title>
409 <section id="defaultallports">
410 <title>Tüm portlar için <code>_default_</code></title>
412 <p>Bir IP adresi ve port belirtilmeyen veya hiçbir sanal konağın hiçbir
413 adresi/portu ile eşleşmeyen istekleri yakalamak istersek...</p>
416 <title>Sunucu yapılandırması</title>
418 <VirtualHost _default_:*><br />
420 DocumentRoot /siteler/default<br />
425 <p>Bütün portlarla eşleşen böyle bir öntanımlı sanal konağın kullanımı
426 hiçbir isteğin ana sunucuya gitmemesi sonucunu doğurur.</p>
428 <p>Bir öntanımlı sanal konak, asla, isme dayalı sanal konaklar için
429 kullanılmış bir adrese/porta gönderilmiş bir isteğe hizmet sunmaz. Eğer
430 istek bilinmeyen bir <code>Host:</code> başlığına sahipse veya hiç
431 <code>Host:</code> başlığı içermiyorsa isteğe daima ilk (yapılandırma
432 dosyasındaki ilk) isme dayalı sanal konak hizmet sunar.</p>
434 <p>Her isteği tek bir bilgilendirme sayfasına (veya betiğe) yönlendirmek
435 isterseniz <directive module="mod_alias">AliasMatch</directive> veya
436 <directive module="mod_rewrite">RewriteRule</directive> yönergesini
437 kullanabilirsiniz.</p>
440 <section id="defaultdifferentports">
441 <title>Farklı portlardan <code>_default_</code></title>
443 <p>Önceki yapılandırmaya ek olarak 80. portta ayrı bir
444 <code>_default_</code> sanal konağı kullanmak istersek...</p>
447 <title>Sunucu yapılandırması</title>
449 <VirtualHost _default_:80><br />
451 DocumentRoot /siteler/default80<br />
454 </VirtualHost><br />
456 <VirtualHost _default_:*><br />
458 DocumentRoot /siteler/default<br />
464 <p>80. porttan hizmet sunan <code>_default_</code> sanal konağı IP adresi
465 belirtilmeyen tüm istekleri yakalar, bunu yapabilmesi için yapılandırma
466 dosyasında tüm portlara hizmet sunan benzerinden önce yer almalıdır. Bu
467 durumda ana sunucu hiçbir isteğe yanıt vermeyecektir.</p>
470 <section id="defaultoneport">
471 <title>Tek portluk <code>_default_</code></title>
473 <p><code>_default_</code> sanal konağının sadece 80. porttan hizmet
474 sunmasını istersek...</p>
477 <title>Sunucu yapılandırması</title>
479 <VirtualHost _default_:80><br />
480 DocumentRoot /siteler/default<br />
485 <p>80. porttan gelen IP adresi belirtilmemiş isteklere
486 <code>_default_</code> sanal konağı, diğer portlardan gelen adres
487 belirtilmemiş isteklere ise ana sunucu hizmet verecektir.</p>
489 <p>Bir sanal konak bildiriminde <code>*</code> kullanımı
490 <code>_default_</code> kullanımından daha yüksek öncelik sağlar.</p>
495 <section id="migrate"><title>Bir isme dayalı sanal konağı bir IP’ye dayalı
496 sanal konakla yansılamak</title>
498 <p>İsme dayalı sanal konak örneklerinin <a href="#twoips">2. sinde</a> adı
499 geçen <code>falanca.dom</code> bu örnekte kendi IP adresinden hizmet
500 veriyor olsun. İsme dayalı sanal konağı eski IP adresiyle kaydetmiş
501 vekiller ve isim sunucularından kaynaklanacak olası sorunlardan kaçınmak
502 için yansılama sırasında sanal konağı hem eski hem de yeni IP adresiyle
505 <p>Çözüm kolay, çünkü yapacağımız sadece <code>VirtualHost</code>
506 yönergesine yeni IP adresini (<code>192.168.2.2</code>) eklemek
510 <title>Sunucu yapılandırması</title>
513 ServerName mesela.dom<br />
514 DocumentRoot /siteler/mesela<br />
516 <VirtualHost 192.168.1.2><br />
518 <VirtualHost 192.168.1.2 192.168.2.2><br />
520 DocumentRoot /siteler/falanca<br />
521 ServerName falanca.dom<br />
524 </VirtualHost><br />
526 <VirtualHost 192.168.1.2><br />
528 DocumentRoot /siteler/faraza<br />
529 ServerName faraza.dom<br />
530 ServerAlias *.faraza.dom<br />
536 <p>Böylece sanal konağa hem yeni (bir IP’ye dayalı sanal konak olarak)
537 hem de eski adresinden (bir isme dayalı sanal konak olarak)
538 erişilebilecektir.</p>
542 <section id="serverpath">
543 <title><code>ServerPath</code> yönergesinin kullanımı</title>
545 <p>İsme dayalı iki sanal konağı olan bir sunucumuz olsun. Doğru sanal
546 konağa erişebilmek için istemcinin doğru <code>Host:</code> başlığı
547 göndermesi gerekir. Eski HTTP/1.0 istemcileri böyle bir başlık
548 göndermedikleri için Apache istemcinin hangi sanal konağa erişmek
549 istediğini bilemez (ve isteğe ilk sanal konaktan hizmet sunar). Daha iyi
550 bir geriye uyumluluk sağlamak için isme dayalı sanal konağa bir önek
551 bağlantısı içeren bir bilgilendirme sayfası sunmak üzere yeni bir sanal
552 konak oluşturabiliriz.</p>
555 <title>Sunucu yapılandırması</title>
557 <VirtualHost 172.20.30.40><br />
559 # ilk sanal konak<br />
560 DocumentRoot /siteler/baska<br />
561 RewriteEngine On<br />
562 RewriteRule . /siteler/baska/index.html<br />
565 </VirtualHost><br />
567 <VirtualHost 172.20.30.40><br />
568 DocumentRoot /siteler/baska/bir<br />
570 ServerName bir.baska.tld<br />
571 ServerPath /bir/<br />
572 RewriteEngine On<br />
573 RewriteRule ^(/bir/.*) /siteler/baska$1<br />
576 </VirtualHost><br />
578 <VirtualHost 172.20.30.40><br />
580 DocumentRoot /siteler/baska/iki<br />
581 ServerName iki.baska.tld<br />
582 ServerPath /iki/<br />
583 RewriteEngine On<br />
584 RewriteRule ^(/iki/.*) /siteler/baska$1<br />
590 <p><directive module="core">ServerPath</directive> yönergesinden dolayı
591 <code>http://bir.baska.tld/bir/</code> şeklinde yapılan isteklere
592 <em>daima</em> “bir” sanal konağı hizmet sunacaktır.</p>
594 <p><code>http://bir.baska.tld/</code> şeklinde yapılan isteklere ise
595 istemcinin doğru <code>Host:</code> başlığı göndermesi şartıyla
596 “bir” sanal konağı hizmet sunacaktır. İstemci, bir
597 <code>Host:</code> başlığı göndermediği takdirde ilk konaktan bir
598 bilgilendirme sayfası alacaktır.</p>
600 <p>Yalnız buradaki bir tuhaflığa dikkat edin: Eğer istemci bir
601 <code>Host:</code> başlığı göndermeden
602 <code>http://iki.baska.tld/bir/</code> şeklinde bir istek yaparsa bu
603 isteğe de “bir” sanal konağı hizmet sunacaktır.</p>
605 <p><directive module="mod_rewrite">RewriteRule</directive> yönergesi, bir
606 istemcinin, bir URL öneki belirtsin ya da belirtmesin doğru
607 <code>Host:</code> başlığı gönderdiğinden emin olmak için