1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" lang="tr" xml:lang="tr"><head><!--
4 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
5 This file is generated from xml source: DO NOT EDIT
6 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
8 <title>Devingen olarak Yapılandırılan Kitlesel Sanal Barındırma - Apache HTTP Sunucusu</title>
9 <link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
10 <link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
11 <link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
12 <link href="../images/favicon.ico" rel="shortcut icon" /></head>
13 <body id="manual-page"><div id="page-header">
14 <p class="menu"><a href="../mod/">Modüller</a> | <a href="../mod/directives.html">Yönergeler</a> | <a href="../faq/">SSS</a> | <a href="../glossary.html">Terimler</a> | <a href="../sitemap.html">Site Haritası</a></p>
15 <p class="apache">Apache HTTP Sunucusu Sürüm 2.0</p>
16 <img alt="" src="../images/feather.gif" /></div>
17 <div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>
19 <a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Sunucusu</a> > <a href="http://httpd.apache.org/docs/">Belgeleme</a> > <a href="../">Sürüm 2.0</a> > <a href="./">Sanal Konaklar</a></div><div id="page-content"><div id="preamble"><h1>Devingen olarak Yapılandırılan Kitlesel Sanal Barındırma</h1>
21 <p><span>Mevcut Diller: </span><a href="../en/vhosts/mass.html" hreflang="en" rel="alternate" title="English"> en </a> |
22 <a href="../ko/vhosts/mass.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
23 <a href="../tr/vhosts/mass.html" title="Türkçe"> tr </a></p>
27 <p>Bu belgede sanal konakların sonu belirsiz bir şekilde artışı karşısında
28 Apache httpd sunucusunun nasıl daha verimli kullanılacağı açıklanmıştır.
32 <div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#motivation">Amaç</a></li>
33 <li><img alt="" src="../images/down.gif" /> <a href="#overview">Genel Bakış</a></li>
34 <li><img alt="" src="../images/down.gif" /> <a href="#simple">Basit Devingen Sanal Konaklar</a></li>
35 <li><img alt="" src="../images/down.gif" /> <a href="#homepages">Sanal Kişisel Sayfalar Sistemi</a></li>
36 <li><img alt="" src="../images/down.gif" /> <a href="#combinations">Aynı Sunucuda Kişisel ve Kurumsal Sanal Konaklar</a></li>
37 <li><img alt="" src="../images/down.gif" /> <a href="#ipbased">IP’ye dayalı sanal konakları daha verimli kılmak</a></li>
38 <li><img alt="" src="../images/down.gif" /> <a href="#simple.rewrite"><code>mod_rewrite</code> ile Kurumsal Müşteriler Sistemi</a></li>
39 <li><img alt="" src="../images/down.gif" /> <a href="#homepages.rewrite"><code>mod_rewrite</code> ile Kişisel Sayfalar Sistemi</a></li>
40 <li><img alt="" src="../images/down.gif" /> <a href="#xtra-conf">Sanal konaklar için ayrı bir yapılandırma dosyası kullanmak</a></li>
42 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
44 <h2><a name="motivation" id="motivation">Amaç</a></h2>
46 <p>Burada açıklanan teknikler, <code>httpd.conf</code> dosyanızın
47 örnekteki gibi, aslında hemen hemen birbirinin aynı çok sayıda
48 <code><VirtualHost></code> bölümü içereceği zaman yapılacaklar ile
51 <div class="example"><p><code>
52 NameVirtualHost 111.22.33.44<br />
53 <VirtualHost 111.22.33.44><br />
55 ServerName musteri-1.dom<br />
56 DocumentRoot /siteler/musteri-1.dom/belgeler<br />
57 ScriptAlias /cgi-bin/ /siteler/musteri-1.dom/cgi-bin<br />
59 </VirtualHost><br />
60 <VirtualHost 111.22.33.44><br />
62 ServerName musteri-2.dom<br />
63 DocumentRoot /siteler/musteri-2.dom/belgeler<br />
64 ScriptAlias /cgi-bin/ /siteler/musteri-2.dom/cgi-bin<br />
66 </VirtualHost><br />
67 # blah blah blah<br />
68 <VirtualHost 111.22.33.44><br />
70 ServerName musteri-N.dom<br />
71 DocumentRoot /siteler/musteri-N.dom/belgeler<br />
72 ScriptAlias /cgi-bin/ /siteler/musteri-N.dom/cgi-bin<br />
77 <p>Ana fikir, tüm durağan <code><VirtualHost></code>
78 yapılandırmalarını devingen olarak çalışan tek bir
79 <code><VirtualHost></code> bölümüyle değiştirmektir. Bunun elbette
80 bazı getirileri olacaktır:</p>
83 <li>Yapılandırma dosyanız küçüleceği için Apache daha çabuk
84 başlatılabilecek ve daha az bellek harcayacaktır.</li>
86 <li>Yeni sanal konakların eklenmesi, DNS’de yeni girdiler oluşturmak ve
87 dosya sisteminde bununla ilgili dizinleri açmak dışında biraz daha
88 basit olacaktır; en azından Apache’yi yeniden yapılandırmak ve yeniden
89 başlatmak zorunda kalmayacaksınız.</li>
92 <p>Ana götürüsü ise her sanal konak için ayrı birer günlük dosyasına sahip
93 olamayacak olmanızdır. Öte yandan, dosya tanıtıcılarının sınırlı olması
94 nedeniyle bunu yapmayı zaten istemezsiniz. Günlük kayıtları için bir
95 fifo veya bir boru hattı oluşturmak ve diğer uçta çalışan bir süreç
96 vasıtasıyla günlükleri müşterilere paylaştırmak daha iyidir (ayrıca, bu,
97 istatistikleri toplamanızı da kolaylaştırır).</p>
99 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
100 <div class="section">
101 <h2><a name="overview" id="overview">Genel Bakış</a></h2>
103 <p>Bir sanal konak iki bilgiye bakarak belirlenir: IP adresi ve HTTP
104 isteğindeki <code>Host:</code> başlığının içeriği. Devingen sanal
105 barındırma tekniği, isteği yerine getirmek için kullanılacak dosya
106 yoluna bu bilgiyi kendiliğinden girmek esasına dayanır. Bu, Apache 2.0
107 ile <code class="module"><a href="../mod/mod_vhost_alias.html">mod_vhost_alias</a></code> kullanarak oldukça kolay
108 yapılabileceği gibi <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> da kullanılabilir. Bu
109 modüllerin her ikisi de öntanımlı olarak devre dışıdır. Bu tekniği
110 kullanmak isterseniz Apache’yi yeniden yapılandırıp derleyerek bu iki
111 modülü etkin duruma getirmeniz gerekir.</p>
113 <p>Devingen sanal konağı normal bir sanal konak gibi göstermek için bazı
114 şeyleri ’göstermelik’ olarak yapmak gerekir. Bunlardan en önemlisi,
115 Apache tarafından göreli URL’lerden normal URL’leri ve benzerlerini
116 üretmek için kullanılan sunucu ismidir. Sunucu ismi
117 <code>ServerName</code> yönergesi ile yapılandırılır ve CGI’ler
118 tarafından <code>SERVER_NAME</code> ortam değişkeni üzerinden
119 kullanılır. Çalışma anındaki asıl değer <code class="directive"><a href="../mod/core.html#usecanonicalname">UseCanonicalName</a></code> yönergesi tarafından denetlenir.
120 <code>UseCanonicalName Off</code> olduğunda sunucu ismi isteğin
121 <code>Host:</code> başlık alanından elde edilir. <code>UseCanonicalName
122 DNS</code> belirtilmişse, sunucu ismi, sanal konağın IP adresinden
123 tersine DNS sorgusu yapılarak elde edilir. Birincisi isme dayalı sanal
124 konaklar tarafından ikincisi ise IP’ye dayalı sanal konaklar tarafından
125 kullanılır. Eğer Apache, istekte <code>Host:</code> başlığının olmayışı
126 veya DNS sorgusunun başarısız olması sebebiyle sunucu ismini elde
127 edemezse son çare olarak <code>ServerName</code> yönergesinde yazılı
130 <p>‘Göstermelik’ yapılan şeylerden biri de <code>DocumentRoot</code>
131 yönergesi ile yapılandırılan belge kök dizini olup CGI’ler tarafından
132 <code>DOCUMENT_ROOT</code> ortam değişkeni üzerinden kullanılır. Normal
133 yapılandırmada <code class="module"><a href="../mod/core.html">core</a></code> modülü tarafından dosya isimlerini
134 URI’lere eşlerken kullanılır. Fakat sunucu devingen sanal konakları
135 kullanmak üzere yapılandırıldığında, eşleştirmeyi farklı yollardan yapan
136 başka bir modül devreye girer (<code>mod_vhost_alias</code> veya
137 <code>mod_rewrite</code>). <code>DOCUMENT_ROOT</code> ortam değişkenine
138 değerini atamaktan sorumlu olan bu iki modülden biri kullanılmazsa CGI
139 veya SSI belgeleri yanlış değerlerle üretilirler.</p>
141 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
142 <div class="section">
143 <h2><a name="simple" id="simple">Basit Devingen Sanal Konaklar</a></h2>
145 <p>Yukarıda <a href="#motivation">Amaç</a> bölümünde özetlenen sanal konak
146 düzenlemesinin <code>mod_vhost_alias</code> kullanarak daha soysal bir
147 tarzda gerçekleştirilmiş halini içeren <code>httpd.conf</code> bölümü
150 <div class="example"><p><code>
151 # sunucu ismini Host: başlığından elde edelim<br />
152 UseCanonicalName Off<br />
154 # Bu günlükleme biçiminde ilk alana bakarak<br />
155 # sanal konak günlükleri ayrıştırılabilir<br />
156 LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon<br />
157 CustomLog logs/access_log vcommon<br />
159 # istekleri yerine getirmek için kullanılacak<br />
160 # dosya isimlerine sunucu ismini ekleyelim<br />
161 VirtualDocumentRoot /siteler/%0/belgeler<br />
162 VirtualScriptAlias /siteler/%0/cgi-bin
165 <p>Bu yapılandırmayı IP’ye dayalı sanal konaklar için kullanmak isterseniz
166 <code>UseCanonicalName Off</code> yerine <code>UseCanonicalName
167 DNS</code> yazmanız yeterlidir. Böylece dosya ismine eklenecek konak
168 ismi sanal konağın IP adresinden türetilir.</p>
170 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
171 <div class="section">
172 <h2><a name="homepages" id="homepages">Sanal Kişisel Sayfalar Sistemi</a></h2>
174 <p>Bu sistem, yukarıdaki yapılandırmanın bir ISS’nin kişisel sayfalar
175 sunucusuna uyarlanmasından başka bir şey değildir. Biraz daha karmaşık
176 bir yapılandırma ile dosya isimlerine <code>/home/kullanıcı/</code>
177 dizinlerini ekleyebiliriz. Farklı olarak her sanal konak için bir tane
178 değil hepsi için bir tane <code>cgi-bin</code> olacaktır.</p>
180 <div class="example"><p><code>
181 # Son bölüm hariç yukarıdaki yapılandırma, burada...<br />
183 # sunucu ismine eklenecek dosya isimlerini oluşturalım<br />
184 VirtualDocumentRoot /siteler/%2/belgeler<br />
186 # ortak cgi-bin dizini<br />
187 ScriptAlias /cgi-bin/ /siteler/std-cgi/<br />
190 <p><code class="module"><a href="../mod/mod_vhost_alias.html">mod_vhost_alias</a></code> belgesinde daha karmaşık
191 <code>VirtualDocumentRoot</code> örnekleri vardır.</p>
193 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
194 <div class="section">
195 <h2><a name="combinations" id="combinations">Aynı Sunucuda Kişisel ve Kurumsal Sanal Konaklar</a></h2>
197 <p>Daha karmaşık ayarlamalar yaparak Apache’inin normal
198 <code><VirtualHost></code> bölümlerini farklı kitlesel sanal konak
199 yapılandırmaları için kullanabilirsiniz. Örneğin, bireysel
200 müşterileriniz için bir IP adresiniz, kurumsal müşterileriniz için de
201 başka bir IP adresiniz olsun. Her biri için ayrı ayrı sanal konaklar
202 ayarlamak yerine aşağıdaki gibi bir yapılandırma kullanabilirsiniz:</p>
204 <div class="example"><p><code>
205 UseCanonicalName Off<br />
207 LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon<br />
209 <Directory /siteler/kurumsal><br />
210 <span class="indent">
211 Options FollowSymLinks<br />
212 AllowOverride All<br />
214 </Directory><br />
216 <Directory /siteler/bireysel><br />
217 <span class="indent">
218 Options FollowSymLinks<br />
219 AllowOverride None<br />
221 </Directory><br />
223 <VirtualHost 111.22.33.44><br />
224 <span class="indent">
225 ServerName kurumsal.iss.dom<br />
227 CustomLog logs/access_log.kurumsal vcommon<br />
229 VirtualDocumentRoot /siteler/kurumsal/%0/belgeler<br />
230 VirtualScriptAlias /siteler/kurumsal/%0/cgi-bin<br />
232 </VirtualHost><br />
234 <VirtualHost 111.22.33.45><br />
235 <span class="indent">
236 ServerName bireysel.iss.dom<br />
238 CustomLog logs/access_log.bireysel vcommon<br />
240 VirtualDocumentRoot /siteler/bireysel/%0/belgeler<br />
241 ScriptAlias /cgi-bin/ /siteler/std-cgi/<br />
245 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
246 <div class="section">
247 <h2><a name="ipbased" id="ipbased">IP’ye dayalı sanal konakları daha verimli kılmak</a></h2>
249 <p><a href="#simple">İlk örnekte</a> IP’ye dayalı sanal konaklar için
250 kullanılmak istenirse yapılandırmada neyin nasıl değiştirileceği
251 belirtilmişti. Her istek için ayrı bir DNS sorgusu gerekeceğinden bu
252 başarım düşmesine yol açar. DNS sorgusu ihtiyacını ortadan kaldırmak
253 için, bir çözüm olarak dosya sistemi, konak isimleri yerine IP
254 adreslerine göre düzenlenebilir. Günlük kayıtları da IP adreslerine göre
255 ayrıştırılacak şekilde ayarlanabilir.</p>
257 <div class="example"><p><code>
258 # Sunucu ismini IP adresinden ters DNS sorgusu ile elde edelim<br />
259 UseCanonicalName DNS<br />
261 # Günlük kayıtları IP adreslerine göre ayrıştırılabilsin<br />
262 LogFormat "%A %h %l %u %t \"%r\" %s %b" vcommon<br />
263 CustomLog logs/access_log vcommon<br />
265 # dosya isimleri IP adreslerini içersin<br />
266 VirtualDocumentRootIP /siteler/%0/belgeler<br />
267 VirtualScriptAliasIP /siteler/%0/cgi-bin<br />
270 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
271 <div class="section">
272 <h2><a name="simple.rewrite" id="simple.rewrite"><code>mod_rewrite</code> ile Kurumsal Müşteriler Sistemi</a></h2>
274 <p>Buradaki <code>httpd.conf</code> bölümü de <a href="#simple">ilk
275 örnekteki</a> gibi elde edilmiştir. İlk yarı, bazı değişiklikler dışında
276 yukarıdaki örneğe çok benzer. Bu değişiklikler yapılandırmanın
277 <code>mod_rewrite</code> bölümünün düzgün çalışması ve geriye doğru
278 uyumluluk için gereklidir. İkinci yarı, asıl işi yapan
279 <code>mod_rewrite</code> yapılandırmasını içerir.</p>
281 <p>Biraz uzmanlık gerektiren bazı kısımlar var: Öntanımlı olarak
282 <code>mod_rewrite</code> diğer (<code>mod_alias</code>, vs. gibi) URI
283 dönüşüm modüllerinden önce çalışır. Dolayısıyla bu modülleri kullanmak
284 isterseniz, <code>mod_rewrite</code>’ı bunlara izin verecek şekilde
285 yapılandırmalısınız. Ayrıca her devingen sanal konağa eşdeğer bir
286 <code>ScriptAlias</code> yapmak için de biraz büyü yapmak gerekir.</p>
288 <div class="example"><p><code>
289 # Sunucu ismini Host: başlığınıdan alalım.<br />
290 UseCanonicalName Off<br />
292 # Günlük dosyasından bilgileri ayıklayabilelim.<br />
293 LogFormat "%{Host}i %h %l %u %t \"%r\" %s %b" vcommon<br />
294 CustomLog logs/access_log vcommon<br />
296 <Directory /siteler/hosts><br />
297 <span class="indent">
298 # ScriptAlias için yaptıklarımızla CGI betiklerini<br />
299 # çalışmaya zorlayamayacağımızdan ExecCGI burada gerekli.<br />
300 Options FollowSymLinks ExecCGI<br />
302 </Directory><br />
304 # İşin zor yanına geldik.<br />
306 RewriteEngine On<br />
308 # Host: başlığından elde edilen sunucu isminde harf<br />
309 # büyüklükleri çeşitli olabilir. Hepsini küçük harf yapalım.<br />
310 RewriteMap lowercase int:tolower<br />
312 ## önce normal belgelerle anlaşalım:<br />
313 # Alias /icons/ çalışsın - diğer rumuzlar için yineleyelim<br />
314 RewriteCond %{REQUEST_URI} !^/icons/<br />
315 # CGI’ler de çalışsın.<br />
316 RewriteCond %{REQUEST_URI} !^/cgi-bin/<br />
317 # Biraz da büyü yapalım.<br />
318 RewriteRule ^/(.*)$ /siteler/${lowercase:%{SERVER_NAME}}/belgeler/$1<br />
320 ## Artık CGI’lerle anlaşabiliriz. - Bir MIME türü isteyelim.<br />
321 RewriteCond %{REQUEST_URI} ^/cgi-bin/<br />
322 RewriteRule ^/(.*)$ /siteler/${lowercase:%{SERVER_NAME}}/cgi-bin/$1 [T=application/x-httpd-cgi]<br />
327 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
328 <div class="section">
329 <h2><a name="homepages.rewrite" id="homepages.rewrite"><code>mod_rewrite</code> ile Kişisel Sayfalar Sistemi</a></h2>
331 <p>Burada da <a href="#homepages">ikinci örnekte</a> yaptıklarımızı
334 <div class="example"><p><code>
335 RewriteEngine on<br />
337 RewriteMap lowercase int:tolower<br />
339 # CGI’ler çalışsın.<br />
340 RewriteCond %{REQUEST_URI} !^/cgi-bin/<br />
342 # konak ismi doğru mu bakalım yoksa RewriteRule çalışmaz.<br />
343 RewriteCond ${lowercase:%{SERVER_NAME}} ^www\.[a-z-]+\.isp\.dom$<br />
345 # URI’nin başına sanal konak ismini ekleyelim.<br />
346 # [C], bunu bitirdikten sonra, sonraki rewrite ile devam et demek.<br />
347 RewriteRule ^(.+) ${lowercase:%{SERVER_NAME}}$1 [C]<br />
349 # Artık asıl dosya ismini oluşturabiliriz.<br />
350 RewriteRule ^www\.([a-z-]+)\.isp\.dom/(.*) /home/$1/$2<br />
352 # Ortak CGI dizinini tanımlayalım.<br />
353 ScriptAlias /cgi-bin/ /siteler/std-cgi/
356 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
357 <div class="section">
358 <h2><a name="xtra-conf" id="xtra-conf">Sanal konaklar için ayrı bir yapılandırma dosyası kullanmak</a></h2>
360 <p>Burada, sanal konak isimlerinden belge kök dizini elde ederken
361 <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> modülünün daha gelişkin özelliklerinden
362 yararlanarak isimleri ayrı bir dosyadan okutacağız. Bu, esnekliği
363 artırır ama daha karmaşık bir yapılandırma gerekir.</p>
365 <p>Aşağıdaki içeriğe sahip bir <code>vhost.map</code>dosyamız olsun:</p>
367 <div class="example"><p><code>
368 musteri-1.dom /siteler/kurumsal/1<br />
369 musteri-2.dom /siteler/kurumsal/2<br />
371 musteri-N.dom /siteler/kurumsal/N<br />
374 <p><code>httpd.conf</code> dosyamız da şunları içerecektir:</p>
376 <div class="example"><p><code>
377 RewriteEngine on<br />
379 RewriteMap lowercase int:tolower<br />
381 # Eşlem dosyasını tanımlayalım<br />
382 RewriteMap vhost txt:/siteler/conf/vhost.map<br />
384 # Rumuzları yukarıdaki gibi halledelim.<br />
385 RewriteCond %{REQUEST_URI} !^/icons/<br />
386 RewriteCond %{REQUEST_URI} !^/cgi-bin/<br />
387 RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$<br />
388 # Eşlemeyi dosyalar için de yapalım.<br />
389 RewriteCond ${vhost:%1} ^(/.*)$<br />
390 RewriteRule ^/(.*)$ %1/belgeler/$1<br />
392 RewriteCond %{REQUEST_URI} ^/cgi-bin/<br />
393 RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$<br />
394 RewriteCond ${vhost:%1} ^(/.*)$<br />
395 RewriteRule ^/(.*)$ %1/cgi-bin/$1
399 <div class="bottomlang">
400 <p><span>Mevcut Diller: </span><a href="../en/vhosts/mass.html" hreflang="en" rel="alternate" title="English"> en </a> |
401 <a href="../ko/vhosts/mass.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
402 <a href="../tr/vhosts/mass.html" title="Türkçe"> tr </a></p>
403 </div><div id="footer">
404 <p class="apache">Copyright 2009 The Apache Software Foundation.<br /><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a> altında lisanslıdır.</p>
405 <p class="menu"><a href="../mod/">Modüller</a> | <a href="../mod/directives.html">Yönergeler</a> | <a href="../faq/">SSS</a> | <a href="../glossary.html">Terimler</a> | <a href="../sitemap.html">Site Haritası</a></p></div>