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:1174747 (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="caching.xml.meta">
29 <title>Önbellek Kullanım Kılavuzu</title>
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>
41 <section id="introduction">
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
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>
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
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>
85 <section id="overview">
87 <title>Önbelleklemeye Bir Bakış</title>
91 <module>mod_cache</module>
92 <module>mod_cache_disk</module>
93 <module>mod_file_cache</module>
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>
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ığı
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>
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>
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
149 <!-- Bu içerik önbelleklenebilir. --><br />
150 <!--#include virtual="/dipnot.html" --><br />
152 <!-- Bu içerik önbelleklenemez. --><br />
153 <!--#include file="/bir/yol/dipnot.html" -->
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>
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
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 httpd’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
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 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
226 <title>Neler Önbelleklenebilir?</title>
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>
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>
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
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 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>
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>
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>
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>
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>
284 <title>Neler Önbelleklenmemeli?</title>
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>
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>
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>
299 <title>Değişken/Uzlaşımlı İçerik</title>
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>
307 <p>Örneğin, bir yanıt şöyle bir başlık ile alınmışsa,</p>
310 Vary: negotiate,accept-language,accept-charset
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>
319 <section id="security">
320 <title>Güvenlik Kaygıları</title>
323 <title>Erişim Denetimi ve Yetkilendirme</title>
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>
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
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>
351 <title>Yerel İstismarcılar</title>
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ı
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
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>
377 <title>Önbellek Zehirlenmeleri</title>
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>
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>
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>
400 <section id="filehandle">
401 <title>Dosya Tanıtıcı Önbelleklemesi</title>
405 <module>mod_file_cache</module>
408 <directive module="mod_file_cache">CacheFile</directive>
409 <directive module="mod_cache">CacheEnable</directive>
410 <directive module="mod_cache">CacheDisable</directive>
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>
421 <title><code>CacheFile</code> yönergesi ile</title>
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
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ı
437 CacheFile /usr/local/apache2/htdocs/index.html
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>
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
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
458 <section id="inmemory">
459 <title>Sistem Belleğinde Önbellekleme</title>
463 <module>mod_file_cache</module>
466 <directive module="mod_cache">CacheEnable</directive>
467 <directive module="mod_cache">CacheDisable</directive>
468 <directive module="mod_file_cache">MMapFile</directive>
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
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>
490 <title>İşletim Sistemi Önbelleklemesi</title>
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>
499 colm@coroebus:~$ time cat testfile > /dev/null<br />
503 colm@coroebus:~$ time cat testfile > /dev/null<br />
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>
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
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>
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
532 <title><code>MMapFile</code> yönergesi ile</title>
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>
542 MMapFile /usr/local/apache2/htdocs/index.html
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>
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>
560 <title>Disk Üzerinde Önbellekleme</title>
564 <module>mod_cache_disk</module>
567 <directive module="mod_cache">CacheEnable</directive>
568 <directive module="mod_cache">CacheDisable</directive>
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>
577 <p>Modül bu amaçla genelde şöyle kullanılır:</p>
580 CacheRoot /var/cache/apache/<br />
581 CacheEnable disk /<br />
582 CacheDirLevels 2<br />
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>
593 <title>Önbellekte Saklamanın Anlamı</title>
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>
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>
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
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
625 module="mod_cache_disk">CacheDirLength</directive> için değer olarak
626 "1" belirtmenizi öneririz.</p>
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>
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>
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>
645 <title>Disk Önbelleğinin Bakımı</title>
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>
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>
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>
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>
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>