]> granicus.if.org Git - apache/blob - docs/manual/caching.xml.tr
Rebuild
[apache] / docs / manual / caching.xml.tr
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: 1058639:1291840 (outdated) -->
5 <!-- =====================================================
6  Translated by: Nilgün Belma Bugüner <nilgun belgeler.org>
7    Reviewed by: Orhan Berent <berent belgeler.org>
8 ========================================================== -->
9
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
17
18      http://www.apache.org/licenses/LICENSE-2.0
19
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 -->
26
27 <manualpage metafile="caching.xml.meta">
28
29   <title>Önbellek Kullanım Kılavuzu</title>
30
31   <summary>
32     <p>Bu belge <module>mod_cache</module>,
33       <module>mod_cache_disk</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 HTTPD sunucusunun önbellekleme
38       özelliklerinin nasıl kullanılacağı açıklanmıştır.</p>
39   </summary>
40
41   <section id="introduction">
42     <title>Giriş</title>
43
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>
50
51     <p><module>mod_cache</module>, ortam sağlayıcı modülü olan
52       <module>mod_cache_disk</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>
61
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 httpd’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>
70
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>
77
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>
82
83   </section>
84
85   <section id="overview">
86
87     <title>Önbelleklemeye Bir Bakış</title>
88
89     <related>
90       <modulelist>
91         <module>mod_cache</module>
92         <module>mod_cache_disk</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>
104
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>
109
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>
114
115     <p>Eğer URL önbellekte yoksa, <module>mod_cache</module> isteği bir  <a
116       href="filter.html">süzgece</a> tabi tutar. httpd 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>
120
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>
129
130     <section>
131       <title>Önbelleğin Hızlandırılması</title>
132
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>
141
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>
147
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>
155
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>
160
161     <section>
162       <title>Zaman Aşımı Süreleri</title>
163
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>
169
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>
175
176       <p>Yerel içerik için, zaman aşımı süresini hassas olarak ayarlamak
177         gerekirse <module>mod_expires</module> kullanılabilir.</p>
178
179       <p>Zaman aşımı süresinin üst sınırı <directive
180         module="mod_cache">CacheMaxExpire</directive> yönergesi ile
181         belirlenebilir.</p>
182
183     </section>
184
185     <section>
186       <title>Şartlı İstekler için Özlü Kılavuz</title>
187
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 httpd’nin şartlı bir istek yapması sonucunu doğurur.</p>
191
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>
198
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>
204
205       <p>Aksi takdirde  bir şartlı istek yapılmamış gibi içeriğin kendisi
206         sunulur.</p>
207
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>
212
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 httpd 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>
224
225     <section>
226       <title>Neler Önbelleklenebilir?</title>
227
228       <p>Evvelce bahsedildiği gibi httpd’de iki tür önbellekleme yapılır ve
229         bunlar farklı yöntemlerle çalışır. <module>mod_file_cache</module>
230         önbelleklemesinde dosyalar httpd 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>
233
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>
239
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>
244
245         <li>Yanıtın HTTP durum kodu 200, 203, 300, 301 veya 410 olmalıdır.</li>
246
247         <li>İstek bir HTTP GET isteği olmalıdır.</li>
248
249         <li>İstek bir "Authorization:" başlığı içeriyorsa yanıt önbelleğe
250           alınmayacaktır.</li>
251
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>
255
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 veya
259           "Cache-Control:" başlığının max-age veya max-age yönergesini
260           içermedikçe yanıt içeriği önbelleğe alınmayacaktır.</li>
261
262         <li><directive module="mod_cache">CacheIgnoreNoLastMod</directive>
263           yönergesinin kullanımını gerektiren bir durum olmadıkça 200 durum
264           koduna sahip bir yanıtın "Etag", "Last-Modified" ve "Expires"
265           başlıklarından birini veya "Cache-Control:" başlığının max-age veya
266           max-age yönergelerinden birini (en azından) içermesi gerekir.</li>
267
268         <li><directive module="mod_cache">CacheStorePrivate</directive>
269           yönergesinin kullanımını gerektiren bir durum olmadıkça yanıt
270           "private" değerli bir "Cache-Control:" başlığı içerdiği takdirde
271           yanıtın içeriği önbelleğe alınmayacaktır.</li>
272
273         <li>Benzer şekilde, <directive module="mod_cache"
274           >CacheStoreNoStore</directive> yönergesi kullanılmamışsa yanıt
275           "no-store" değerli bir "Cache-Control:" başlığı içeriyorsa yanıt
276           içeriği önbelleğe alınmayacaktır.</li>
277
278         <li>Herşeyle eşleşen "*" değerli bir "Vary:" başlığı içeren bir
279           yanıtın içeriği önbelleğe alınmaz.</li>
280       </ol>
281     </section>
282
283     <section>
284       <title>Neler Önbelleklenmemeli?</title>
285
286       <p>Kısaca, istek zamana aşırı bağımlıysa ya da istek kısmen bile olsa
287         HTTP uzlaşımıyla bağdaşmıyorsa önbelleğe alınmamalıdır.</p>
288
289       <p>İçeriği istekçinin IP adresine bağlı olarak değişen veya her beş
290         dakikada bir değişikliğe uğrayan bir devingen içeriğe sahipseniz böyle
291         bir içerik asla önbelleğe alınmamalıdır.</p>
292
293       <p>Diğer taraftan, içerik HTTP başlığındaki değerlere bağlı olarak
294         değişiyorsa içeriğin bir "Vary" başlığı kullanılarak akıllıca
295         önbelleklenmesi imkanı mevcuttur.</p>
296     </section>
297
298     <section>
299       <title>Değişken/Uzlaşımlı İçerik</title>
300
301       <p>"Vary" başlıklı bir yanıt arka sunucudan istenirken
302         <module>mod_cache</module> tarafından alınmışsa akıllıca ele alınmaya
303         çalışılacaktır. Mümkünse, <module>mod_cache</module> gelecekte bu
304         içerikle ilgili isteklerin "Vary" başlıklı yanıtları olacağını
305         saptayacak ve önbellekten doğru içerikle yanıt verecektir.</p>
306
307       <p>Örneğin, bir yanıt şöyle bir başlık ile alınmışsa,</p>
308
309       <example>
310         Vary: negotiate,accept-language,accept-charset
311       </example>
312
313       <p><module>mod_cache</module> sadece accept-language ve accept-charset
314         başlıkları özgün istekle eşleşen önbellekli içeriği sunacaktır.</p>
315     </section>
316
317   </section>
318
319   <section id="security">
320     <title>Güvenlik Kaygıları</title>
321
322     <section>
323       <title>Erişim Denetimi ve Yetkilendirme</title>
324
325       <p><module>mod_cache</module> çoğunlukla bir karşı vekile sahip olmak
326         amacıyla kullanılır. Arka sunucunun sorgulanmasını gerektirmeyen tüm
327         istekler önbellekleme modülü tarafından karşılanacaktır. Yerel
328         özkaynakların önbelleklenmesi söz konusu olduğunda httpd’nin güvenlik
329         modeli büyükçe bir değişikliğe uğrar.</p>
330
331       <p>Olası <code>.htaccess</code> dosyalarının dosya sisteminin tamamında
332         taranması çok pahalı bir işlem olduğundan <module>mod_cache</module>,
333         (işlemi hızlandırmak için) önbelleğe almanın temel amacını kısmen
334         gözardı ederek, önbellekteki içeriğin sunumu için gerekli
335         yetkilendirmenin olup olmadığı konusunda bir karar üretmez. Başka bir
336         deyişle, eğer <module>mod_cache</module> bir kısım içeriği önbelleğe
337         almışsa içerik zaman aşımına uğramadığı sürece bu içerik önbellekten
338         sunulacaktır.</p>
339
340       <p>Örneğin, yapılandırmanız bir özkaynağa IP adresine göre erişime izin
341         veriyorsa bu içeriğin önbelleğe alınmayacağından emin olmalısınız.
342         Bunu <directive module="mod_cache">CacheDisable</directive>
343         yönergesini veya <module>mod_expires</module> kullanarak
344         yapabilirsiniz. Bunu yapmaz, olayı kendi haline bırakırsanız
345         <module>mod_cache</module> bir karşı vekil gibi çalışarak sunulan her
346         içeriği arabelleğe alacak ve hangi IP adresinden gelirse gelsin her
347         istemciye bunu sunacaktır.</p>
348     </section>
349
350     <section>
351       <title>Yerel İstismarcılar</title>
352
353       <p>Son kullanıcılarıın isteklerine önbellekten hizmet sunulduğundan
354         önbelleğin kendisi içerikle etkileşime geçmek isteyenlerin veya
355         içeriği tahrif etmek isteyenlerin hedefi haline gelebilir. httpd’yi
356         çalıştıran kullanıcı tarafından her zaman önbelleğe yazılabileceğini
357         akıldan çıkarmamak önemlidir. Bu durumda alışılmışın tersine tüm
358         içeriğin Apache kullanıcısı tarafından yazılamamasının sağlanması
359         önerilir.</p>
360
361       <p>Eğer Apache kullanıcısı, örneğin bir CGI sürecindeki açık nedeniyle
362         tehlikeye atılırsa, önbellek hedef alınabilir.
363         <module>mod_cache_disk</module> kullanılırken önbellekteki bir öğeyi
364         değiştirmek veya önbelleğe yeni bir öğe eklemek görece daha
365         kolaydır.</p>
366
367       <p>Bu risk, Apache kullanıcısını kullanan diğer saldırı türleriyle
368         karşılaştırıldığında daha yüksektir. <module>mod_cache_disk</module>
369         kullanıyorsanız şunları aklınızdan çıkarmayın: (1) httpd güvenlik
370         güncellemelerini takip edin ve sunucunuzu buna göre güncelleyin. (2)
371         Mümkünse <a href="suexec.html">suEXEC</a> kullanarak CGI süreçlerini
372         Apache kullanıcısı olmayan bir kullanıcının aidiyetinde çalıştırın.</p>
373
374     </section>
375
376     <section>
377       <title>Önbellek Zehirlenmeleri</title>
378
379       <p>httpd bir önbellekli vekil sunucu olarak çalıştığında önbellek
380         zehirlenmesi adı verilen sorunla karşılaşılma olasılığı vardır.
381         Önbellek zehirlenmesi, vekil sunucunun arka sunucudan yanlış (ve
382         genellikle istenmeyen) içerik almasına sebep olan bir saldırı türünü
383         betimlemek için yaygın olarak kullanılan bir terimdir.</p>
384
385       <p>Örneğin httpd’nin çalıştığı sistemin kullandığı DNS sunucuları DNS
386         önbellek zehirlenmesinden etkilenebilecek durumdaysa, bir saldırgan
387         httpd’nin istekleri almak için başvuracağı kaynak sunucunun yerini
388         değiştirebilir. Diğer bir örnek, HTTP istek kaçakçılığı adı verilen
389         bir saldırı türüdür.</p>
390
391       <p>Bu belge HTTP istek kaçakçılığını derinliğine incelenmesi için uygun
392         yer değildir (böyle kaynaklara arama motorunuzla erişebilirsiniz).
393         Bununla birlikte, vekil tarafından kaynak sunucudan alınan içeriği
394         tamamen denetim altına almak amacıyla kaynak sunucudaki bir açığı
395         istismar etmeye yönelik bir dizi istek yapılabileceğinin olasılık
396         dahilinde olduğunu bilmenizde yarar vardır.</p>
397     </section>
398   </section>
399
400   <section id="filehandle">
401     <title>Dosya Tanıtıcı Önbelleklemesi</title>
402
403     <related>
404       <modulelist>
405         <module>mod_file_cache</module>
406       </modulelist>
407       <directivelist>
408         <directive module="mod_file_cache">CacheFile</directive>
409         <directive module="mod_cache">CacheEnable</directive>
410         <directive module="mod_cache">CacheDisable</directive>
411       </directivelist>
412     </related>
413
414     <p>Bir dosyanın açılması işlemi, özellikle de ağ dosya sistemlerinde
415       bulunan dosyalar için önemli bir gecikme kaynağı olabilir. Önbellekte,
416       çok sunulan dosyaların kendilerinin değil, açık dosya tanıtıcılarının
417       saklanması httpd’yi bu tür gecikmelerden koruyabilir. httpd’de tek türde
418       dosya tanıtıcı önbelleklemesi yapılabilmektedir.</p>
419
420     <section>
421       <title><code>CacheFile</code> yönergesi ile</title>
422
423       <p>httpd’de mevcut önbelleklemenin en temel şekli
424         <module>mod_file_cache</module> tarafından sağlanan dosya tanıtıcı
425         önbelleklemesidir. Bu önbellek türü dosyaların kendilerini değil açık
426         dosya tanıtıcılarının bir listesini saklar. Dosyaların bu anlamda
427         önbelleklenmesi, <directive module="mod_file_cache"
428         >CacheFile</directive> yönergesi yapılandırma dosyasında belirtilerek
429         sağlanabilir.</p>
430
431       <p><directive module="mod_file_cache">CacheFile</directive> yönergesi
432         belirtilen dosyanın httpd başlatıldığında açılmasını ve dosya için
433         yapılan sonraki her istekte bu dosya tanıtıcısının kullanılmasını
434         sağlar.</p>
435
436       <example>
437         CacheFile /usr/local/apache2/htdocs/index.html
438       </example>
439
440       <p>Büyük miktarda dosyayı bu anlamda önbelleklemeyi tasarlıyorsanız
441         işletim sisteminizin açık dosya tanıtıcılarının sayısı ile ilgili
442         sınırlamasını uygun bir değere ayarlamanız gerekebilir.</p>
443
444       <p><directive module="mod_file_cache">CacheFile</directive> yönergesini
445         kullandığınız takdirde dosya içeriğindeki değişiklikleri anında isteğe
446         yansıtamazsınız. httpd dosyayı ilk başlatıldığındaki haliyle
447         sunar.</p>
448
449       <p>Eğer httpd çalışırken dosya silinmişse httpd ilk başlatıldığındaki
450         haline ilişkin dosya tanıtıcıyı sağlamaya ve dolayısıyla dosya
451         içeriğini sunmaya devam edecektir. Yani, dosya silinmiş ve artık dosya
452         sisteminde görünmüyor olsa bile httpd durdurulup dosya tanıtıcıları
453         kapanmadıkça dosyaların silinmesiyle açılan yer serbest
454         kalmayacaktır.</p>
455     </section>
456   </section>
457
458   <section id="inmemory">
459     <title>Sistem Belleğinde Önbellekleme</title>
460
461      <related>
462       <modulelist>
463         <module>mod_file_cache</module>
464       </modulelist>
465       <directivelist>
466         <directive module="mod_cache">CacheEnable</directive>
467         <directive module="mod_cache">CacheDisable</directive>
468         <directive module="mod_file_cache">MMapFile</directive>
469       </directivelist>
470     </related>
471
472     <p>İçeriğin sistem belleğinden sunulması içerik sunmanın evrensel olarak
473       en hızlı yoludur. Dosyaların bir disk denetleyiciden okunması ya da daha
474       kötüsü uzak bir ağdan okunması bellekten okumayla karşılaştırılamayacak
475       ölçüde yavaş işlemlerdir. Disk denetleyiciler genellikle fiziksel
476       süreçleri denetlerler. Ağ erişimi ise band genişliği sınırlamalarından
477       etkilenir. Halbuki bellek erişimi sadece nano saniyeler mertebesinde
478       gerçekleşir.</p>
479
480     <p>Sistem belleği en pahalı saklama ortamı olması sebebiyle en verimli
481       şekilde kullanımı önemlidir. Dosyaları sistem belleğinde saklamakla
482       sistemin kullanabileceği bellek miktarını azaltmış olursunuz. İşletim
483       sistemi önbelleklemesinde göreceğiniz gibi bu öyle basit bir konu
484       değildir. httpd’nin kendi kullandığı belleğin bir kısmını önbellek
485       olarak ayırırken çok fazla bellek kullanmamak önemlidir. Aksi takdirde
486       işletim sistemi belleğin yetmediği noktada belleği diske
487       takaslayacağından istenen başarım artışı sağlanamayacaktır.</p>
488
489     <section>
490       <title>İşletim Sistemi Önbelleklemesi</title>
491
492       <p>Günümüz iştetim sistemlerinin hemen hemen tamamında bellek içi
493         dosya/veri saklama işlemlerini çekirdek yönetir. Bu güçlü bir
494         özelliktir ve işletim sistemlerinin büyük çoğunluğu bunu böyle yapar.
495         Örneğin, Linux’ta bir dosyanın ilk defa okunduğunda ve ikinci kez
496         okunduğunda işlemcinin ne kadar meşgul edildiğine bakalım:</p>
497
498       <example>
499         colm@coroebus:~$ time cat testfile &gt; /dev/null<br />
500         real    0m0.065s<br />
501         user    0m0.000s<br />
502         sys     0m0.001s<br />
503         colm@coroebus:~$ time cat testfile &gt; /dev/null<br />
504         real    0m0.003s<br />
505         user    0m0.003s<br />
506         sys     0m0.000s
507       </example>
508
509       <p>Küçük bir dosya için bile okuma süresi bakımından büyük fark ortaya
510         çıkmaktadır. Bunun sebebi çekirdeğin dosya içeriğini bellek daha
511         güncel amaçlar için lazım olana dek bellek içinde saklamasıdır.</p>
512
513       <p>Sisteminizde yeterince yedek bellek olduğundan eminseniz, bu
514         önbellekte daha fazla dosya saklanacağından emin olabilirsiniz.
515         Bundan, önbelleğin sistem belleğinde verimli biçimde tutulması için
516         httpd’de ek bir yapılandırmaya gidilmesinin gerekmediği sonucu
517         çıkarılabilir.</p>
518
519       <p>Bundan başka, işletim sistemi dosyaların değiştiği ve silindiği
520         zamanları bildiğinden bu tür dosyaların içerikleri gerektiğinde
521         önbellekten kendiliğinden silinmiş olur. Bellek içinde dosya saklarken
522         dosyaların değiştirilme zamanlarını bilme olanağı olmadığından bu
523         durum httpd’ye büyük yarar sağlar.</p>
524     </section>
525
526     <p>İşletim sisteminin dosyaların önbelleklenmesi için sağladığı bunca
527       yarara ve başarım artışına karşın bellek içinde dosya önbelleklemenin
528       httpd tarafından yerine getirilmesinin daha iyi olacağı bazı durumlar
529       vardır.</p>
530
531     <section>
532       <title><code>MMapFile</code> yönergesi ile</title>
533
534       <p><module>mod_file_cache</module> modülü, bir durağan dosyanın
535         içeriğini sunucunun başlatılması sırasında (mmap sistem çağrısıyla)
536         belleğe eşlenmesini mümkün kılmak için <directive
537         module="mod_file_cache" >MMapFile</directive> yönergesini sağlar.
538         httpd bu dosyaya gelecek sonraki istekler için dosyanın bellekiçi
539         içeriğini kullanacaktır.</p>
540
541       <example>
542         MMapFile /usr/local/apache2/htdocs/index.html
543       </example>
544
545       <p><directive module="mod_file_cache">CacheFile</directive> yönergesinde
546         olduğu gibi bu dosyalarda httpd başlatıldıktan sonra yapılacak bir
547         değişiklikten httpd’nin haberi olmayacaktır.</p>
548
549       <p><directive module="mod_file_cache">MMapFile</directive> yönergesi
550         ayırdığı belleğin toplam miktarı ile ilgilenmez, dolayısıyla
551         yönergenin aşırı kullanımından kaçınmalısınız. httpd’nin çocuk
552         süreçlerinin her biri bu belleğin kendilerine ait birer kopyasını
553         yapacağından belleğe eşlenen dosyaların çok yer kaplamaması büyük önem
554         taşımaktadır; aksi takdirde işletim sistemi belleği diske
555         takaslayacağından beklenen fayda sağlanamayacaktır.</p>
556     </section>
557   </section>
558
559   <section id="disk">
560     <title>Disk Üzerinde Önbellekleme</title>
561
562      <related>
563       <modulelist>
564         <module>mod_cache_disk</module>
565       </modulelist>
566       <directivelist>
567         <directive module="mod_cache">CacheEnable</directive>
568         <directive module="mod_cache">CacheDisable</directive>
569       </directivelist>
570     </related>
571
572     <p><module>mod_cache_disk</module> modülü önbelleklemenin
573       <module>mod_cache</module> için disk üzerinde yapılmasını mümkün
574       kılar. Bbu önbellekleme akıllıca yapılır ve önbellekteki içerik
575       sadece geçerli kabul edildiği sürece sunulabilir.</p>
576
577     <p>Modül bu amaçla genelde şöyle kullanılır:</p>
578
579     <example>
580       CacheRoot   /var/cache/apache/<br />
581       CacheEnable disk /<br />
582       CacheDirLevels 2<br />
583       CacheDirLength 1
584     </example>
585
586     <p>En önemlisi önbelleklenen dosyaların yerel olarak saklanması olup
587       işletim sisteminin sağladığı bellekiçi önbelleklemeden de ayrıca
588       faydalanılmış olur. Bu bakımdan, dosyalar disk üzerinde saklansa bile
589       sıkça erişilen dosyalar işletim sistemi sayesinde aslında bellekten
590       sunulmuş olacaklardır.</p>
591
592     <section>
593       <title>Önbellekte Saklamanın Anlamı</title>
594
595       <p><module>mod_cache_disk</module> öğeleri önbellekte saklamak için
596         istek yapılan URL’nin 22 karakterlik özetini oluşturur. Bu özet, çok
597         sayıda URL’nin aynı özeti oluşturmaması için konak ismi, protokol,
598         port ve varsa CGI argümanlarından oluşur.</p>
599
600       <p>Özeti oluşturan karakterler 64 karakterlik bir karakter kümesinden
601         seçildiğinden oluşturulması olası farklı özet sayısı 64^22’dir.
602         Örneğin, bir URL’nin <code>xyTGxSMO2b68mBCykqkp1w</code> gibi bir
603         özeti olabilir. Bu özet, bu URL ile erişilen dosyalar önbellek içinde
604         saklanırken dosya ismi öneki olarak kullanılır. Ancak bununla
605         yetinilmez ve içerik <directive
606         module="mod_cache_disk">CacheDirLevels</directive> ve <directive
607         module="mod_cache_disk">CacheDirLength</directive> yönergelerinin
608         değerlerine göre önce dizinlere ayrılır.</p>
609
610       <p><directive module="mod_cache_disk">CacheDirLevels</directive>
611         yönergesi kaç alt seviye dizin olacağını belirler. Örneğin, yukarıdaki
612         özete sahip bir dosyanın isminin başına yukarıdaki yapılandırma
613         örneğine uygun olarak
614         <code>/var/cache/apache/x/y/TGxSMO2b68mBCykqkp1w</code> gibi bir önek
615         getirilebilirdi.</p>
616
617       <p>Bu tekniğin asıl amacı belli bir dizin içinde bulunabilecek
618         dosyaların ve alt dizinlerin sayısını düşük tutmaktır. Bu sayının
619         büyük olması çoğu işletim sisteminde başarımın düşmesine sebep olur.
620         <directive module="mod_cache_disk">CacheDirLength</directive>
621         yönergesi "1" değeriyle kullanıldığında her dizin altında en fazla 64
622         alt dizin veya dosya açılabilir. "2" değeriyle kullanıldığında ise bu
623         sayı 64^2’ye yükselir ve böyle artarak gider. İyi bir sebebiniz
624         olmadıkça <directive
625         module="mod_cache_disk">CacheDirLength</directive> için değer olarak
626         "1" belirtmenizi öneririz.</p>
627
628       <p><directive module="mod_cache_disk">CacheDirLevels</directive>
629         yönergesine atanacak değer önbellekte saklamayı düşündüğünüz olası
630         dosya sayısı ile ilgilidir. Yukarıdaki örnekte olduğu gibi "2"
631         değerini belirtirseniz, toplamda en fazla 4096 dizin oluşturulabilir.
632         1 milyon dosyanın önbelleklendiği bir durumda bu, her dizinde yaklaşık
633         olarak 245 önbelleklenmiş URL demektir.</p>
634
635       <p>Her URL için önbellekte en az iki dosya saklanır. Biri genellikle URL
636         hakkındaki temel verilerden oluşan ".header" dosyasıdır, diğeri ise
637         sunulacak içeriğin bire bir kopyası olan ".data" dosyasıdır.</p>
638
639       <p>"Vary" başlığı üzerinden içeriğin uzlaşıldığı durumda URL için bir
640         ".vary" dizini oluşturulur. Bu dizin her biri farklı bir uzlaşıma ait
641         çok sayıda ".data" dosyası içerebilir.</p>
642     </section>
643
644     <section>
645       <title>Disk Önbelleğinin Bakımı</title>
646
647       <p><module>mod_cache_disk</module> zaman aşımına uğrayan önbellekli
648         içeriği silse de önbelleğin toplam boyu ve ne kadar boş bellek kaldığı
649         hakkında bilgi vermez.</p>
650
651       <p>Bunun yerine httpd önbellek içeriğini düzenli aralıklarla
652         temizleyebilmeniz için <program>htcacheclean</program> adında bir araç
653         içerir.  Önbellek için azami ne kadar yer kullanılacağının ve bunun
654         üzerinde <program>htcacheclean</program>’i hangi sıklıkta
655         çalıştırılacağının tespiti biraz karmaşık bir işlem olup uygun değerler
656         genellikle deneme yanılma yoluyla bulunur.</p>
657
658       <p><program>htcacheclean</program> iki işlem kipine sahiptir. Kalıcı bir
659         artalan süreci olarak çalışabileceği gibi cron üzerinden belli
660         aralıklarla da çalıştırılabilir. Çok büyük (onlarca GB) önbelleklerde
661         <program>htcacheclean</program>’in işini bitirmesi 1 saatten fazla
662         sürebileceğinden, cron ile çalıştırma durumunda aynı anda birden fazla
663         kopyanın çalışıyor durumda olmaması için
664         <program>htcacheclean</program>’in çalıştırılma aralığını iyi
665         belirlemek gerekir.</p>
666
667       <p class="figure">
668       <img src="images/caching_fig1.tr.png" alt="" width="600"
669           height="406" /><br />
670       <a id="figure1" name="figure1"><dfn>Şekil 1</dfn></a>:
671  Önbelleğin büyümesi ve düzenli aralıklarla temizlenmesi.</p>
672
673       <p><module>mod_cache_disk</module> ne kadar önbellek alanı kullandığı
674         ile ilgili bir bilgi vermediğinden <program>htcacheclean</program>’in
675         bir temizlik sonrası yeterince büyük bir genişleme alanı kalacak
676         şekilde yapılandırılması önemlidir.</p>
677     </section>
678
679   </section>
680
681 </manualpage>