switch to a 60 bit hash
[httpd-crcsyncproxy.git] / docs / manual / caching.xml.tr
blobaef4a95807260b22e8bbea247b41752a7d7fa535
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: 743408 -->
5 <!-- =====================================================
6 Translated by: Nilgün Belma Bugüner <nilgun belgeler.org>
7 Reviewed by: Orhan Berent <berent belgeler.org>
8 ========================================================== -->
10 <!--
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.
25 -->
27 <manualpage metafile="caching.xml.meta">
29 <title>Önbellek Kullanım Kılavuzu</title>
31 <summary>
32 <p>Bu belge <module>mod_cache</module>,
33 <module>mod_disk_cache</module>, <module>mod_file_cache</module>
34 modülleri ve <a href="programs/htcacheclean.html">htcacheclean</a>
35 için bir başvuru kılavuzu niteliğindedir. HTTP sunucusu ve vekil
36 olarak çalışmada işlemleri hızlandırmak için bilinen sorunlar ve
37 yanlış yapılandırmalardan kaçınarak Apache’nin önbellekleme
38 özelliklerinin nasıl kullanılacağı açıklanmıştır.</p>
39 </summary>
41 <section id="introduction">
42 <title>Giriş</title>
44 <p>Apache HTTP sunucusunun 2.2 sürümünden itibaren
45 <module>mod_cache</module> ve <module>mod_file_cache</module> modülleri
46 deneysel olmaktan çıkarılmış ve üretim amaçlı kullanılabileceğine karar
47 verilmiştir. Bu önbellekleme mimarileri gerek HTTP sunucusu gerekse
48 vekili olarak çalışmada HTTP işlemlerini hızlandırmak anlamında sunucuya
49 güç katarlar.</p>
51 <p><module>mod_cache</module>, ortam sağlayıcı modülü olan
52 <module>mod_disk_cache</module> ile birlikte HTTP önbelleklemesini
53 akıllıca yerine getirir. İçeriğin kendisi önbellekte saklanırken
54 <module>mod_cache</module> içeriğin önbelleklenebilmesini denetim
55 altında tutan HTTP başlıkları ve seçenekleri ile ilgilenir. Yerel ve
56 vekalet edilen içeriğin her ikisinin de aynı anda işlem görmesi
57 sağlanabilir. <module>mod_cache</module>, vekalet edilen içeriğe,
58 devingen yerel içeriğe veya zamanla değişen yerel dosyalara erişimi
59 hızlandırma ihtiyacına yönelik olarak hem basit hem de karmaşık
60 önbellekleme yapılandırmalarını mümkün kılar.</p>
62 <p><module>mod_file_cache</module> ise biraz daha temel ancak bazen daha
63 kullanışlı olabilen bir önbellekleme şekli ile ilgilenir. URL’lerin
64 önbelleklenebilmesini mümkün kılmanın karmaşıklığıyla boğuşmak yerine
65 <module>mod_file_cache</module>, dosyaların Apache’nin son başlatıldığı
66 zamanki durumlarını saklamak için dosyaların belleğe eşlenmek üzere ele
67 alınmasını sağlar. Böylelikle, <module>mod_file_cache</module>, çok sık
68 değişmeyen durağan yerel dosyalara erişim zamanını azaltmaya yardım
69 eder.</p>
71 <p><directive module="mod_file_cache">CacheFile</directive> ve
72 <directive module="mod_file_cache">MMapFile</directive> yönergeleri ile
73 ilgili bölümlerde anlatılanları saymazsak
74 <module>mod_file_cache</module>, bu belgenin asıl konusu olan
75 <module>mod_cache</module> önbellekleme mimarisine göre daha basit bir
76 önbellekleme gerçeklenimidir.</p>
78 <p>Bu belgeden azami yararı sağlayabilmek için temel bir HTTP bilginizin
79 olması ve <a href="urlmapping.html">URL’lerin Dosya Sistemine
80 Eşlenmesi</a> ile <a href="content-negotiation.html">İçerik Uzlaşımı</a>
81 belgelerini okumuş olmanız gerekir.</p>
83 </section>
85 <section id="overview">
87 <title>Önbelleklemeye Bir Bakış</title>
89 <related>
90 <modulelist>
91 <module>mod_cache</module>
92 <module>mod_disk_cache</module>
93 <module>mod_file_cache</module>
94 </modulelist>
95 <directivelist>
96 <directive module="mod_cache">CacheEnable</directive>
97 <directive module="mod_cache">CacheDisable</directive>
98 <directive module="mod_file_cache">CacheFile</directive>
99 <directive module="mod_file_cache">MMapFile</directive>
100 <directive module="core">UseCanonicalName</directive>
101 <directive module="mod_negotiation">CacheNegotiatedDocs</directive>
102 </directivelist>
103 </related>
105 <p>Bir istek sonuçlanıncaya kadar <module>mod_cache</module> modülünde iki
106 aşamadan geçer. İlkinde <module>mod_cache</module> bir URL eşleme modülü
107 olarak çalışır ve URL önbellekteyse ve zaman aşımına uğramamışsa isteğin
108 doğrudan <module>mod_cache</module> tarafından sunulmasını sağlar.</p>
110 <p>Yani isteğin sunumu sırasında, isteğin örneğin,
111 <module>mod_proxy</module> veya <module>mod_rewrite</module> tarafından
112 ele alınması gerekse bile bu yapılmaz. Önbelleklenen içerik ilk alındığı
113 haliyle sunulur.</p>
115 <p>Eğer URL önbellekte yoksa, <module>mod_cache</module> isteği bir <a
116 href="filter.html">süzgece</a> tabi tutar. Apache içeriğin varlığını
117 saptamışsa içeriğin süzgeç tarafından sunulmasını sağladıktan sonra,
118 süzgeç içeriğin önbelleklenebileceğini saptamışsa gelecekte sunmak üzere
119 içeriği önbelleğe kaydeder.</p>
121 <p>Eğer URL önbellekte bulunmuş fakat içeriğin zaman aşımına uğradığı
122 anlaşılmışsa süzgeç yine de eklenir fakat bu kez
123 <module>mod_cache</module> önbellekteki sürümün hala geçerli olup
124 olmadığını saptamak için kaynağın bulunduğu sunucuya bir koşullu istek
125 gönderir. Önbellekteki sürüm hala geçerliyse temel verileri güncellenir
126 ve istek önbellekten sunulur. Önbellekteki sürüm artık geçerli değilse,
127 önbellekteki sürüm silinir ve süzgeç güncel içeriği önbelleğe kaydeder
128 ve isteği oradan sunar.</p>
130 <section>
131 <title>Önbelleğin Hızlandırılması</title>
133 <p>Yerel içerik önbelleklendiği takdirde <directive
134 module="core">UseCanonicalName</directive> yönergesine <code>On</code>
135 değeri atanmışsa önbellekten sunulan sayfa sayısında büyük bir artış
136 olduduğu görülür. Bunun sebebi içeriği sunan sanal konağın isminin
137 önbellek anahtarının bir parçası olarak kullanılmasıdır. Yönergeye
138 <code>On</code> değerini atamak suretiyle çok isimli ve rumuzlu sanal
139 konaklar için farklı önbellek girdileri oluşturulmaz, bunun yerine her
140 meşru sanal konak için ayrı bir önbellek tutulur.</p>
142 <p>Önbellekleme, URL’nin dosya ismine dönüştürülmesi aşamasında
143 gerçekleştiğinden önbelleklenen belgeler sadece URL isteklerine bir
144 yanıt olarak sunulurlar. <a href="howto/ssi.html">Sunucu Taraflı
145 İçerikleri</a> kullanmazsanız genellikle bunun fazla bir önemi
146 olmaz.</p>
148 <example>
149 &lt;!-- Bu içerik önbelleklenebilir. --&gt;<br />
150 &lt;!--#include virtual="/dipnot.html" --&gt;<br />
151 <br />
152 &lt;!-- Bu içerik önbelleklenemez. --&gt;<br />
153 &lt;!--#include file="/bir/yol/dipnot.html" --&gt;
154 </example>
156 <p>Sunucu Taraflı İçerikleri kullanıyorsanız ve önbelleklemenin
157 sağladığı hız artışından da yaralanmak istiyorsanız içerik
158 yerleştirmek için <code>virtual</code> içerik türünü kullanınız.</p>
159 </section>
161 <section>
162 <title>Zaman Aşımı Süreleri</title>
164 <p>Önbellekli öğeler için öntanımlı zaman aşımı süresi bir saat olmakla
165 birlikte <directive module="mod_cache">CacheDefaultExpire</directive>
166 yönergesi kullanılarak bu değer kolaylıkla geçersiz kılınabilir. Bu
167 öntanımlı değer sadece içeriğin özgün kaynağı bir zaman aşımı süresi
168 veya son değişiklik tarihi belirtmediği takdirde kullanılır.</p>
170 <p>Bir yanıt <code>Expires</code> başlığını değil de
171 <code>Last-Modified</code> başlığını içeriyorsa
172 <module>mod_cache</module> zaman aşımı süresini <directive
173 module="mod_cache">CacheLastModifiedFactor</directive> yönergesinin
174 nasıl kullanıldığına bakarak saptar.</p>
176 <p>Yerel içerik için, zaman aşımı süresini hassas olarak ayarlamak
177 gerekirse <module>mod_expires</module> kullanılabilir.</p>
179 <p>Zaman aşımı süresinin üst sınırı <directive
180 module="mod_cache">CacheMaxExpire</directive> yönergesi ile
181 belirlenebilir.</p>
183 </section>
185 <section>
186 <title>Şartlı İstekler için Özlü Kılavuz</title>
188 <p>Önbellekteki içerik zaman aşımına uğrayıp, içerik sağlayıcıya veya
189 arka sunucuya özgün isteği aktarmak yerine ayrı bir istek yapılması
190 gereği Apache’nin şartlı bir istek yapması sonucunu doğurur.</p>
192 <p>Bir istemcinin veya önbelleğin aynı içeriğin farklı sürümleri
193 arasında ayrım yapabilmesi için HTTP protokolü bazı başlık alanları
194 önerir. Örneğin, "Etag:" başlığıyla sunulan bir özkaynak için
195 "If-None-Match:" başlığıyla bir şartlı istek yapmak mümkün olduğu gibi
196 özkaynak "Last-Modified:" başlığıyla sunuluyorsa şartlı istek
197 "If-Modified-Since:" başlığıyla yapılabilir, vesaire.</p>
199 <p>Böyle bir şartlı istek yapıldığında yanıt koşulun içerikle eşleşip
200 eşleşmediğine bağlı olarak farklı olur. Eğer istek bir
201 "If-Modified-Since:" başlığıyla yapılmışsa ve içerik istekte
202 belirtilen zamandan önce değiştirilmemişse kısa ve öz olarak bir "304
203 Not Modified" (Bir değişiklik yok) iletisiyle yanıt verilir.</p>
205 <p>Aksi takdirde bir şartlı istek yapılmamış gibi içeriğin kendisi
206 sunulur.</p>
208 <p>Önbellekleme ile ilgili şartlı istekler çifte yarar sağlar. Birinci
209 olarak, böyle bir istek arkadaki sunucuya yapılıyorsa ve iki içerik de
210 aynıysa bunu saptamak kolay olur ve özkaynağın tamamını aktarma
211 külfetinden kurtulunur.</p>
213 <p>İkinci olarak, şartlı istekler arka sunucuda normalden daha az
214 faaliyete sebep olur. Durağan dosyalar için bu genellikle
215 <code>stat()</code> veya benzeri bir sistem çağrısıyla dosya
216 boyutları ve değişiklik zamanına bakmak şeklinde gerçekleşir.
217 Böylelikle Apache yerel içeriği önbellekliyor olsa bile ve hatta
218 içerik zaman aşımına da uğrasa önbellekteki dosyada bir değişiklik
219 olmadığı takdirde içeriği önbellekten sunmak daha hızlı olacaktır.
220 Çünkü dosyayı önbellekten okumak, arka sunucudan okumaktan daha
221 hızlıdır (bu, bellekten okumayla diskten okumayı karşılaştırmak
222 gibidir).</p>
223 </section>
225 <section>
226 <title>Neler Önbelleklenebilir?</title>
228 <p>Evvelce bahsedildiği gibi Apache’de iki tür önbellekleme yapılır ve
229 bunlar farklı yöntemlerle çalışır. <module>mod_file_cache</module>
230 önbelleklemesinde dosyalar Apache başlatıldığı zamanki içerikle
231 saklanır. Bu modül tarafından önbelleğe alınmış bir dosya için istek
232 geldiğinde isteğin yolu kesilip önbellekteki dosya sunulur.</p>
234 <p><module>mod_cache</module> önbelleklemesinde işler biraz daha
235 karışıktır. Bir isteğe hizmet sunulurken istenen içerik evvelce
236 önbelleklenmemişse önbellekleme modülü önce içeriğin
237 önbelleklenebilirliğine bakar. Bir yanıtın önbelleklenebilirliğini
238 belirleyen koşullar şunlardır:</p>
240 <ol>
241 <li>Önbellekleme bu URL ile etkin kılınabilmelidir. <directive
242 module="mod_cache">CacheEnable</directive> ve <directive
243 module="mod_cache">CacheDisable</directive> yönergelerine bakınız.</li>
245 <li>Yanıtın HTTP durum kodu 200, 203, 300, 301 veya 410 olmalıdır.</li>
247 <li>İstek bir HTTP GET isteği olmalıdır.</li>
249 <li>İstek bir "Authorization:" başlığı içeriyorsa yanıt önbelleğe
250 alınmayacaktır.</li>
252 <li>Eğer yanıt bir "Authorization:" başlığı içeriyorsa ayrıca
253 "Cache-Control:" başlığında da "s-maxage", "must-revalidate" veya
254 "public" değerlerinden birini içermelidir.</li>
256 <li>Eğer URL (GET yöntemi kullanan bir HTML formunun yaptığı gibi) bir
257 sorgu dizgesi içeriyorsa yanıt, RFC2616’nın 13.9. bölümünde
258 açıklandığı gibi bir "Expires:" başlığı içermedikçe yanıt içeriği
259 önbelleğe alınmayacaktır.</li>
261 <li><directive module="mod_cache">CacheIgnoreNoLastMod</directive>
262 yönergesinin kullanımını gerektiren bir durum olmadıkça 200 durum
263 koduna sahip bir yanıtın "Etag", "Last-Modified" ve "Expires"
264 başlıklarından en az birini içermesi gerekir.</li>
266 <li><directive module="mod_cache">CacheStorePrivate</directive>
267 yönergesinin kullanımını gerektiren bir durum olmadıkça yanıt
268 "private" değerli bir "Cache-Control:" başlığı içerdiği takdirde
269 yanıtın içeriği önbelleğe alınmayacaktır.</li>
271 <li>Benzer şekilde, <directive module="mod_cache"
272 >CacheStoreNoStore</directive> yönergesi kullanılmamışsa yanıt
273 "no-store" değerli bir "Cache-Control:" başlığı içeriyorsa yanıt
274 içeriği önbelleğe alınmayacaktır.</li>
276 <li>Herşeyle eşleşen "*" değerli bir "Vary:" başlığı içeren bir
277 yanıtın içeriği önbelleğe alınmaz.</li>
278 </ol>
279 </section>
281 <section>
282 <title>Neler Önbelleklenmemeli?</title>
284 <p>Kısaca, istek zamana aşırı bağımlıysa ya da istek kısmen bile olsa
285 HTTP uzlaşımıyla bağdaşmıyorsa önbelleğe alınmamalıdır.</p>
287 <p>İçeriği istekçinin IP adresine bağlı olarak değişen veya her beş
288 dakikada bir değişikliğe uğrayan bir devingen içeriğe sahipseniz böyle
289 bir içerik asla önbelleğe alınmamalıdır.</p>
291 <p>Diğer taraftan, içerik HTTP başlığındaki değerlere bağlı olarak
292 değişiyorsa içeriğin bir "Vary" başlığı kullanılarak akıllıca
293 önbelleklenmesi imkanı mevcuttur.</p>
294 </section>
296 <section>
297 <title>Değişken/Uzlaşımlı İçerik</title>
299 <p>"Vary" başlıklı bir yanıt arka sunucudan istenirken
300 <module>mod_cache</module> tarafından alınmışsa akıllıca ele alınmaya
301 çalışılacaktır. Mümkünse, <module>mod_cache</module> gelecekte bu
302 içerikle ilgili isteklerin "Vary" başlıklı yanıtları olacağını
303 saptayacak ve önbellekten doğru içerikle yanıt verecektir.</p>
305 <p>Örneğin, bir yanıt şöyle bir başlık ile alınmışsa,</p>
307 <example>
308 Vary: negotiate,accept-language,accept-charset
309 </example>
311 <p><module>mod_cache</module> sadece accept-language ve accept-charset
312 başlıkları özgün istekle eşleşen önbellekli içeriği sunacaktır.</p>
313 </section>
315 </section>
317 <section id="security">
318 <title>Güvenlik Kaygıları</title>
320 <section>
321 <title>Erişim Denetimi ve Yetkilendirme</title>
323 <p><module>mod_cache</module> çoğunlukla bir karşı vekile sahip olmak
324 amacıyla kullanılır. Arka sunucunun sorgulanmasını gerektirmeyen tüm
325 istekler önbellekleme modülü tarafından karşılanacaktır. Yerel
326 özkaynakların önbelleklenmesi söz konusu olduğunda Apache’nin güvenlik
327 modeli büyükçe bir değişikliğe uğrar.</p>
329 <p>Olası <code>.htaccess</code> dosyalarının dosya sisteminin tamamında
330 taranması çok pahalı bir işlem olduğundan <module>mod_cache</module>,
331 (işlemi hızlandırmak için) önbelleğe almanın temel amacını kısmen
332 gözardı ederek, önbellekteki içeriğin sunumu için gerekli
333 yetkilendirmenin olup olmadığı konusunda bir karar üretmez. Başka bir
334 deyişle, eğer <module>mod_cache</module> bir kısım içeriği önbelleğe
335 almışsa içerik zaman aşımına uğramadığı sürece bu içerik önbellekten
336 sunulacaktır.</p>
338 <p>Örneğin, yapılandırmanız bir özkaynağa IP adresine göre erişime izin
339 veriyorsa bu içeriğin önbelleğe alınmayacağından emin olmalısınız.
340 Bunu <directive module="mod_cache">CacheDisable</directive>
341 yönergesini veya <module>mod_expires</module> kullanarak
342 yapabilirsiniz. Bunu yapmaz, olayı kendi haline bırakırsanız
343 <module>mod_cache</module> bir karşı vekil gibi çalışarak sunulan her
344 içeriği arabelleğe alacak ve hangi IP adresinden gelirse gelsin her
345 istemciye bunu sunacaktır.</p>
346 </section>
348 <section>
349 <title>Yerel İstismarcılar</title>
351 <p>Son kullanıcılarıın isteklerine önbellekten hizmet sunulduğundan
352 önbelleğin kendisi içerikle etkileşime geçmek isteyenlerin veya
353 içeriği tahrif etmek isteyenlerin hedefi haline gelebilir. Apache’yi
354 çalıştıran kullanıcı tarafından her zaman önbelleğe yazılabileceğini
355 akıldan çıkarmamak önemlidir. Bu durumda alışılmışın tersine tüm
356 içeriğin Apache kullanıcısı tarafından yazılamamasının sağlanması
357 önerilir.</p>
359 <p>Eğer Apache kullanıcısı, örneğin bir CGI sürecindeki açık nedeniyle
360 tehlikeye atılırsa, önbellek hedef alınabilir.
361 <module>mod_disk_cache</module> kullanılırken önbellekteki bir öğeyi
362 değiştirmek veya önbelleğe yeni bir öğe eklemek görece daha
363 kolaydır.</p>
365 <p>Bu risk, Apache kullanıcısını kullanan diğer saldırı türleriyle
366 karşılaştırıldığında daha yüksektir. <module>mod_disk_cache</module>
367 kullanıyorsanız şunları aklınızdan çıkarmayın: (1) Apache güvenlik
368 güncellemelerini takip edin ve sunucunuzu buna göre güncelleyin. (2)
369 Mümkünse <a href="suexec.html">suEXEC</a> kullanarak CGI süreçlerini
370 Apache kullanıcısı olmayan bir kullanıcının aidiyetinde çalıştırın.</p>
372 </section>
374 <section>
375 <title>Önbellek Zehirlenmeleri</title>
377 <p>Apache bir önbellekli vekil sunucu olarak çalıştığında önbellek
378 zehirlenmesi adı verilen sorunla karşılaşılma olasılığı vardır.
379 Önbellek zehirlenmesi, vekil sunucunun arka sunucudan yanlış (ve
380 genellikle istenmeyen) içerik almasına sebep olan bir saldırı türünü
381 betimlemek için yaygın olarak kullanılan bir terimdir.</p>
383 <p>Örneğin Apache’nin çalıştığı sistemin kullandığı DNS sunucuları DNS
384 önbellek zehirlenmesinden etkilenebilecek durumdaysa, bir saldırgan
385 Apache’nin istekleri almak için başvuracağı kaynak sunucunun yerini
386 değiştirebilir. Diğer bir örnek, HTTP istek kaçakçılığı adı verilen
387 bir saldırı türüdür.</p>
389 <p>Bu belge HTTP istek kaçakçılığını derinliğine incelenmesi için uygun
390 yer değildir (böyle kaynaklara arama motorunuzla erişebilirsiniz).
391 Bununla birlikte, vekil tarafından kaynak sunucudan alınan içeriği
392 tamamen denetim altına almak amacıyla kaynak sunucudaki bir açığı
393 istismar etmeye yönelik bir dizi istek yapılabileceğinin olasılık
394 dahilinde olduğunu bilmenizde yarar vardır.</p>
395 </section>
396 </section>
398 <section id="filehandle">
399 <title>Dosya Tanıtıcı Önbelleklemesi</title>
401 <related>
402 <modulelist>
403 <module>mod_file_cache</module>
404 </modulelist>
405 <directivelist>
406 <directive module="mod_file_cache">CacheFile</directive>
407 <directive module="mod_cache">CacheEnable</directive>
408 <directive module="mod_cache">CacheDisable</directive>
409 </directivelist>
410 </related>
412 <p>Bir dosyanın açılması işlemi, özellikle de ağ dosya sistemlerinde
413 bulunan dosyalar için önemli bir gecikme kaynağı olabilir. Önbellekte,
414 çok sunulan dosyaların kendilerinin değil, açık dosya tanıtıcılarının
415 saklanması Apache’yi bu tür gecikmelerden koruyabilir. Apache’de tek türde
416 dosya tanıtıcı önbelleklemesi yapılabilmektedir.</p>
418 <section>
419 <title><code>CacheFile</code> yönergesi ile</title>
421 <p>Apache’de mevcut önbelleklemenin en temel şekli
422 <module>mod_file_cache</module> tarafından sağlanan dosya tanıtıcı
423 önbelleklemesidir. Bu önbellek türü dosyaların kendilerini değil açık
424 dosya tanıtıcılarının bir listesini saklar. Dosyaların bu anlamda
425 önbelleklenmesi, <directive module="mod_file_cache"
426 >CacheFile</directive> yönergesi yapılandırma dosyasında belirtilerek
427 sağlanabilir.</p>
429 <p><directive module="mod_file_cache">CacheFile</directive> yönergesi
430 belirtilen dosyanın Apache başlatıldığında açılmasını ve dosya için
431 yapılan sonraki her istekte bu dosya tanıtıcısının kullanılmasını
432 sağlar.</p>
434 <example>
435 CacheFile /usr/local/apache2/htdocs/index.html
436 </example>
438 <p>Büyük miktarda dosyayı bu anlamda önbelleklemeyi tasarlıyorsanız
439 işletim sisteminizin açık dosya tanıtıcılarının sayısı ile ilgili
440 sınırlamasını uygun bir değere ayarlamanız gerekebilir.</p>
442 <p><directive module="mod_file_cache">CacheFile</directive> yönergesini
443 kullandığınız takdirde dosya içeriğindeki değişiklikleri anında isteğe
444 yansıtamazsınız. Apache dosyayı ilk başlatıldığındaki haliyle
445 sunar.</p>
447 <p>Eğer Apache çalışırken dosya silinmişse Apache ilk başlatıldığındaki
448 haline ilişkin dosya tanıtıcıyı sağlamaya ve dolayısıyla dosya
449 içeriğini sunmaya devam edecektir. Yani, dosya silinmiş ve artık dosya
450 sisteminde görünmüyor olsa bile Apache durdurulup dosya tanıtıcıları
451 kapanmadıkça dosyaların silinmesiyle açılan yer serbest
452 kalmayacaktır.</p>
453 </section>
454 </section>
456 <section id="inmemory">
457 <title>Sistem Belleğinde Önbellekleme</title>
459 <related>
460 <modulelist>
461 <module>mod_file_cache</module>
462 </modulelist>
463 <directivelist>
464 <directive module="mod_cache">CacheEnable</directive>
465 <directive module="mod_cache">CacheDisable</directive>
466 <directive module="mod_file_cache">MMapFile</directive>
467 </directivelist>
468 </related>
470 <p>İçeriğin sistem belleğinden sunulması içerik sunmanın evrensel olarak
471 en hızlı yoludur. Dosyaların bir disk denetleyiciden okunması ya da daha
472 kötüsü uzak bir ağdan okunması bellekten okumayla karşılaştırılamayacak
473 ölçüde yavaş işlemlerdir. Disk denetleyiciler genellikle fiziksel
474 süreçleri denetlerler. Ağ erişimi ise band genişliği sınırlamalarından
475 etkilenir. Halbuki bellek erişimi sadece nano saniyeler mertebesinde
476 gerçekleşir.</p>
478 <p>Sistem belleği en pahalı saklama ortamı olması sebebiyle en verimli
479 şekilde kullanımı önemlidir. Dosyaları sistem belleğinde saklamakla
480 sistemin kullanabileceği bellek miktarını azaltmış olursunuz. İşletim
481 sistemi önbelleklemesinde göreceğiniz gibi bu öyle basit bir konu
482 değildir. Apache’nin kendi kullandığı belleğin bir kısmını önbellek
483 olarak ayırırken çok fazla bellek kullanmamak önemlidir. Aksi takdirde
484 işletim sistemi belleğin yetmediği noktada belleği diske
485 takaslayacağından istenen başarım artışı sağlanamayacaktır.</p>
487 <section>
488 <title>İşletim Sistemi Önbelleklemesi</title>
490 <p>Günümüz iştetim sistemlerinin hemen hemen tamamında bellek içi
491 dosya/veri saklama işlemlerini çekirdek yönetir. Bu güçlü bir
492 özelliktir ve işletim sistemlerinin büyük çoğunluğu bunu böyle yapar.
493 Örneğin, Linux’ta bir dosyanın ilk defa okunduğunda ve ikinci kez
494 okunduğunda işlemcinin ne kadar meşgul edildiğine bakalım:</p>
496 <example>
497 colm@coroebus:~$ time cat testfile &gt; /dev/null<br />
498 real 0m0.065s<br />
499 user 0m0.000s<br />
500 sys 0m0.001s<br />
501 colm@coroebus:~$ time cat testfile &gt; /dev/null<br />
502 real 0m0.003s<br />
503 user 0m0.003s<br />
504 sys 0m0.000s
505 </example>
507 <p>Küçük bir dosya için bile okuma süresi bakımından büyük fark ortaya
508 çıkmaktadır. Bunun sebebi çekirdeğin dosya içeriğini bellek daha
509 güncel amaçlar için lazım olana dek bellek içinde saklamasıdır.</p>
511 <p>Sisteminizde yeterince yedek bellek olduğundan eminseniz, bu
512 önbellekte daha fazla dosya saklanacağından emin olabilirsiniz.
513 Bundan, önbelleğin sistem belleğinde verimli biçimde tutulması için
514 Apache’de ek bir yapılandırmaya gidilmesinin gerekmediği sonucu
515 çıkarılabilir.</p>
517 <p>Bundan başka, işletim sistemi dosyaların değiştiği ve silindiği
518 zamanları bildiğinden bu tür dosyaların içerikleri gerektiğinde
519 önbellekten kendiliğinden silinmiş olur. Bellek içinde dosya saklarken
520 dosyaların değiştirilme zamanlarını bilme olanağı olmadığından bu
521 durum Apache’ye büyük yarar sağlar.</p>
522 </section>
524 <p>İşletim sisteminin dosyaların önbelleklenmesi için sağladığı bunca
525 yarara ve başarım artışına karşın bellek içinde dosya önbelleklemenin
526 Apache tarafından yerine getirilmesinin daha iyi olacağı bazı durumlar
527 vardır.</p>
529 <section>
530 <title><code>MMapFile</code> yönergesi ile</title>
532 <p><module>mod_file_cache</module> modülü, bir durağan dosyanın
533 içeriğini sunucunun başlatılması sırasında (mmap sistem çağrısıyla)
534 belleğe eşlenmesini mümkün kılmak için <directive
535 module="mod_file_cache" >MMapFile</directive> yönergesini sağlar.
536 Apache bu dosyaya gelecek sonraki istekler için dosyanın bellekiçi
537 içeriğini kullanacaktır.</p>
539 <example>
540 MMapFile /usr/local/apache2/htdocs/index.html
541 </example>
543 <p><directive module="mod_file_cache">CacheFile</directive> yönergesinde
544 olduğu gibi bu dosyalarda Apache başlatıldıktan sonra yapılacak bir
545 değişiklikten Apache’nin haberi olmayacaktır.</p>
547 <p><directive module="mod_file_cache">MMapFile</directive> yönergesi
548 ayırdığı belleğin toplam miktarı ile ilgilenmez, dolayısıyla
549 yönergenin aşırı kullanımından kaçınmalısınız. Apache’nin çocuk
550 süreçlerinin her biri bu belleğin kendilerine ait birer kopyasını
551 yapacağından belleğe eşlenen dosyaların çok yer kaplamaması büyük önem
552 taşımaktadır; aksi takdirde işletim sistemi belleği diske
553 takaslayacağından beklenen fayda sağlanamayacaktır.</p>
554 </section>
555 </section>
557 <section id="disk">
558 <title>Disk Üzerinde Önbellekleme</title>
560 <related>
561 <modulelist>
562 <module>mod_disk_cache</module>
563 </modulelist>
564 <directivelist>
565 <directive module="mod_cache">CacheEnable</directive>
566 <directive module="mod_cache">CacheDisable</directive>
567 </directivelist>
568 </related>
570 <p><module>mod_disk_cache</module> modülü önbelleklemenin
571 <module>mod_cache</module> için disk üzerinde yapılmasını mümkün
572 kılar. Bbu önbellekleme akıllıca yapılır ve önbellekteki içerik
573 sadece geçerli kabul edildiği sürece sunulabilir.</p>
575 <p>Modül bu amaçla genelde şöyle kullanılır:</p>
577 <example>
578 CacheRoot /var/cache/apache/<br />
579 CacheEnable disk /<br />
580 CacheDirLevels 2<br />
581 CacheDirLength 1
582 </example>
584 <p>En önemlisi önbelleklenen dosyaların yerel olarak saklanması olup
585 işletim sisteminin sağladığı bellekiçi önbelleklemeden de ayrıca
586 faydalanılmış olur. Bu bakımdan, dosyalar disk üzerinde saklansa bile
587 sıkça erişilen dosyalar işletim sistemi sayesinde aslında bellekten
588 sunulmuş olacaklardır.</p>
590 <section>
591 <title>Önbellekte Saklamanın Anlamı</title>
593 <p><module>mod_disk_cache</module> öğeleri önbellekte saklamak için
594 istek yapılan URL’nin 22 karakterlik özetini oluşturur. Bu özet, çok
595 sayıda URL’nin aynı özeti oluşturmaması için konak ismi, protokol,
596 port ve varsa CGI argümanlarından oluşur.</p>
598 <p>Özeti oluşturan karakterler 64 karakterlik bir karakter kümesinden
599 seçildiğinden oluşturulması olası farklı özet sayısı 64^22’dir.
600 Örneğin, bir URL’nin <code>xyTGxSMO2b68mBCykqkp1w</code> gibi bir
601 özeti olabilir. Bu özet, bu URL ile erişilen dosyalar önbellek içinde
602 saklanırken dosya ismi öneki olarak kullanılır. Ancak bununla
603 yetinilmez ve içerik <directive
604 module="mod_disk_cache">CacheDirLevels</directive> ve <directive
605 module="mod_disk_cache">CacheDirLength</directive> yönergelerinin
606 değerlerine göre önce dizinlere ayrılır.</p>
608 <p><directive module="mod_disk_cache">CacheDirLevels</directive>
609 yönergesi kaç alt seviye dizin olacağını belirler. Örneğin, yukarıdaki
610 özete sahip bir dosyanın isminin başına yukarıdaki yapılandırma
611 örneğine uygun olarak
612 <code>/var/cache/apache/x/y/TGxSMO2b68mBCykqkp1w</code> gibi bir önek
613 getirilebilirdi.</p>
615 <p>Bu tekniğin asıl amacı belli bir dizin içinde bulunabilecek
616 dosyaların ve alt dizinlerin sayısını düşük tutmaktır. Bu sayının
617 büyük olması çoğu işletim sisteminde başarımın düşmesine sebep olur.
618 <directive module="mod_disk_cache">CacheDirLength</directive>
619 yönergesi "1" değeriyle kullanıldığında her dizin altında en fazla 64
620 alt dizin veya dosya açılabilir. "2" değeriyle kullanıldığında ise bu
621 sayı 64^2’ye yükselir ve böyle artarak gider. İyi bir sebebiniz
622 olmadıkça <directive
623 module="mod_disk_cache">CacheDirLength</directive> için değer olarak
624 "1" belirtmenizi öneririz.</p>
626 <p><directive module="mod_disk_cache">CacheDirLevels</directive>
627 yönergesine atanacak değer önbellekte saklamayı düşündüğünüz olası
628 dosya sayısı ile ilgilidir. Yukarıdaki örnekte olduğu gibi "2"
629 değerini belirtirseniz, toplamda en fazla 4096 dizin oluşturulabilir.
630 1 milyon dosyanın önbelleklendiği bir durumda bu, her dizinde yaklaşık
631 olarak 245 önbelleklenmiş URL demektir.</p>
633 <p>Her URL için önbellekte en az iki dosya saklanır. Biri genellikle URL
634 hakkındaki temel verilerden oluşan ".header" dosyasıdır, diğeri ise
635 sunulacak içeriğin bire bir kopyası olan ".data" dosyasıdır.</p>
637 <p>"Vary" başlığı üzerinden içeriğin uzlaşıldığı durumda URL için bir
638 ".vary" dizini oluşturulur. Bu dizin her biri farklı bir uzlaşıma ait
639 çok sayıda ".data" dosyası içerebilir.</p>
640 </section>
642 <section>
643 <title>Disk Önbelleğinin Bakımı</title>
645 <p><module>mod_disk_cache</module> zaman aşımına uğrayan önbellekli
646 içeriği silse de önbelleğin toplam boyu ve ne kadar boş bellek kaldığı
647 hakkında bilgi vermez.</p>
649 <p>Bunun yerine Apache önbellek içeriğini düzenli aralıklarla
650 temizleyebilmeniz için <program>htcacheclean</program> adında bir araç
651 içerir. Önbellek için azami ne kadar yer kullanılacağının ve bunun
652 üzerinde <program>htcacheclean</program>’i hangi sıklıkta
653 çalıştırılacağının tespiti biraz karmaşık bir işlem olup uygun değerler
654 genellikle deneme yanılma yoluyla bulunur.</p>
656 <p><program>htcacheclean</program> iki işlem kipine sahiptir. Kalıcı bir
657 artalan süreci olarak çalışabileceği gibi cron üzerinden belli
658 aralıklarla da çalıştırılabilir. Çok büyük (onlarca GB) önbelleklerde
659 <program>htcacheclean</program>’in işini bitirmesi 1 saatten fazla
660 sürebileceğinden, cron ile çalıştırma durumunda aynı anda birden fazla
661 kopyanın çalışıyor durumda olmaması için
662 <program>htcacheclean</program>’in çalıştırılma aralığını iyi
663 belirlemek gerekir.</p>
665 <p class="figure">
666 <img src="images/caching_fig1.tr.png" alt="" width="600"
667 height="406" /><br />
668 <a id="figure1" name="figure1"><dfn>Şekil 1</dfn></a>:
669 Önbelleğin büyümesi ve düzenli aralıklarla temizlenmesi.</p>
671 <p><module>mod_disk_cache</module> ne kadar önbellek alanı kullandığı
672 ile ilgili bir bilgi vermediğinden <program>htcacheclean</program>’in
673 bir temizlik sonrası yeterince büyük bir genişleme alanı kalacak
674 şekilde yapılandırılması önemlidir.</p>
675 </section>
677 </section>
679 </manualpage>