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: 1291840:1766103 (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 sunucusu, sunucunun başarımını çeşitli yollarla arttırmak
45 üzere tasarlanmış bir dizi önbellekleme özelliğine sahiptir.</p>
48 <dt>Üç durumlu RFC2616 HTTP önbelleklemesi</dt>
50 <module>mod_cache</module> ve destek modülü
51 <module>mod_cache_disk</module> akılcı ve HTTP'ye uygun
52 önbellekleme sağlar. İçeriğin kendisi önbellekte saklanır ve
53 <module>mod_cache</module>, <a
54 href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html"
55 >RFC2616'nın 13. bölümü</a>nde açıklandığı gibi, içeriğin
56 önbelleklenebilirliğini denetleyen çeşitli HTTP başlıklarının ve
57 seçeneklerinin tümünü onurlandırmayı hedefler.
58 Devingen yerel içerik veya vekalet edilen içerik ile ilgilendiğiniz
59 durumda veya muhtemel bir yavaş disk üzerinde yerel dosyalara
60 erişimi hızlandırmak ihtiyacında olduğunuz durumda
61 <module>mod_cache</module> hem basit hem de karmaşık önbellekleme
62 yapılandırmalarını hedefler.
64 <dt>İki durumlu anahtar/değer paylaşımlı nesne önbellekleme</dt>
66 <a href="socache.html">Paylaşımlı nesne önbellek API'si</a>
67 (socache) ve destek modülleri sunucu taraflı bir anahtar/değer
68 paylaşımlı nesne önbelleklemesi sağlar. Bu modüller SSL oturumları
69 ve kimlik doğrulama bilgileri gibi düşük seviyeli verileri
70 önbelleklemek için tasarlanmıştır. Destek modülleri verinin sunucu
71 tarafı bir paylaşımlı bellekte veya veri merkezi tarafı memcache
72 veya distcache gibi bir önbellekte saklanmasını mümkün kılar.
74 <dt>Uzmanlaşmış dosya önbellekleme</dt>
76 <module>mod_file_cache</module> dosyaların sunucunun başlatılması
77 sırasında belleğe yüklenmesi ile ilgilenir. Böylece dosyalara
78 erişim zamanını kısaltabilir, sıkça erişilen dosyaların dosya
79 tanıtıcılarını kaydedebilir, her istekte diske gitme ihtiyacını
84 <p>Bu belgeden azami yararı sağlayabilmek için temel bir HTTP bilginizin
85 olması ve <a href="urlmapping.html">URL’lerin Dosya Sistemine
86 Eşlenmesi</a> ile <a href="content-negotiation.html">İçerik Uzlaşımı</a>
87 belgelerini okumuş olmanız gerekir.</p>
91 <section id="http-caching">
93 <title>Üç durumlu RFC2616 HTTP önbelleklemesi</title>
97 <module>mod_cache</module>
98 <module>mod_cache_disk</module>
101 <directive module="mod_cache">CacheEnable</directive>
102 <directive module="mod_cache">CacheDisable</directive>
103 <directive module="core">UseCanonicalName</directive>
104 <directive module="mod_negotiation">CacheNegotiatedDocs</directive>
109 <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html"
110 >RFC2616'nın 13. bölümü</a>nde açıklanan satıriçi önbellekleme
111 mekanizması için yerleşik bir destek içerir ve bunun getirilerinden
112 yararlanmak için <module>mod_cache</module> modülü kullanılabilir.</p>
114 <p>İçeriğin taze olmadığı durumda içeriğin kaybolmasına sebep olan basit
115 iki durumlu anahtar/değer önbelleklemesinin tersine, HTTP önbelleği
116 eskimiş içeriği tutan ve bu eski içeriğin değişip değişmediğini özgün
117 sunucuya soran ve duruma göre onu tekrar taze duruma getiren bir
118 mekanizma içerir.</p>
120 <p>HTTP önbelleğinde bulunan bir girdi şu üç durumdan birinde olabilir:</p>
125 İçerik yeteri kadar yeni (<strong>tazelik ömrü</strong>nden daha genç)
126 ise <strong>taze</strong> sayılır. Bir HTTP önbelleği böyle bir içeriği
127 özgün sunucuya birşey sormadan sunabilir.
131 <p>İçerik çok eski (<strong>tazelik ömrü</strong>nden daha yaşlı)
132 ise <strong>bayat</strong> sayılır. Bir HTTP önbelleği böyle bir
133 içeriği istemciye sunmadan önce özgün sunucuya bağlanıp bayat içeriğin
134 hala yeterince taze olup olmadığına bakmalıdır. Özgün sunucu, içerik
135 geçersizse yenisini gönderecektir, aksi takdirde, (ideal olanı budur)
136 içeriğin hala geçerli olduğunu belirten bir kod ile yanıt verecektir.
137 İçerik tekrar taze hale gelince süreç kaldığı yerden devam eder.</p>
139 <p>HTTP protokolü belli koşullar altında önbelleğin bayat içeriği
140 sunmasına izin vermez. Örneğin, bir içeriği özgün sunucuda tazeleme
141 çabasının bir 5xx hatasıyla başarısız olması veya başka bir tazeleme
142 isteğinin henüz sonuçlanmamış olması bu çeşit koşullardandır. Bu
143 durumlarda yanıta bir <code>Warning</code> başlığı eklenir.</p>
147 Önbellekte yer kalmazsa yer açmak için içeriğin silinmesi seçenek
148 dahilindedir. İçerik taze olsun olmasın her zaman silinebilir. Önlem
149 olarak <program>htcacheclean</program> elle veya bir artalan süreci
150 olarak çalıştırılabilir. Böylece önbelleğin boyutunun belirtilen
151 boyutta veya belirtilen dosya düğümü sayısında kalması sağlanabilir.
152 Araç içeriği silerken bayat içeriğe öncelik verir.
156 <p>HTTP önbelleklemesinin çalışması ile ilgili bütün ayrıntılar
157 <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html"
158 >RFC2616'nın 13. bölümünde</a> bulunabilir.</p>
161 <title>Sunucu ile etkileşim</title>
163 <p><module>mod_cache</module> modülü
164 <directive module="mod_cache">CacheQuickHandler</directive> yönergesinin
165 değerine bağlı olarak iki olası yerde sunucuya bağlanır:
169 <dt>Çabuk eylem aşaması</dt>
171 <p>Bu aşama çok erken gerçekleşen bir aşama olup isteğin işlenmesi
172 sırasında isteğin çözümlenmesinin hemen sonrasıdır. İçerik
173 önbellekte mevcutsa hemen sunulur ve geri kalan istek işleme işlemi
176 <p>Bu senaryoda önbellek sunucunun önüne vidalanmış gibi
179 <p>Sunucuda gerçekleşecek bir dizi işlemin büyük çoğunluğunun
180 yapılmadan geçilmesi nedeniyle bu en yüksek başarımlı kiptir.
181 Bu kip ayrıca, sunucu işlemlerinin kimlik doğrulama ve yetkilendirme
182 aşamalarının da yapılmadan geçilmesini sağlar. Bu bakımdan bu kip
183 seçilirken bu durum dikkate alınmalıdır.</p>
185 <dt>Normal eylem aşaması</dt>
187 <p>Bu aşama geç bir aşama olup, isteğin tamamen işlenmesinin
190 <p>Bu senaryoda önbellek sunucunun arkasına vidalanmış gibi
193 <p>Bu kip en esneğidir. Önbelleğin, süzme zincirinin hassas olarak
194 denetlenen bir noktasında oluşması sağlanabilir ve önbelleklenen
195 içerik istemciye gönderilmeden önce süzülüp
196 kişiselleştirilebilir.</p>
200 <p>URL önbellekte yoksa <module>mod_cache</module> modülü yanıtı
201 önbelleğe kaydetme aşamasında süzgeç yığıtına bir
202 <a href="filter.html">süzgeç</a> ekler ve geri çekilerek normal istek
203 işlemlerinin devam etmesine izin verir. İçeriğin önbelleklenebilir
204 olduğu saptanırsa içerik gelecekte sunulmak üzere önbelleğe
205 kaydedilir, aksi takdirde içerik yok sayılır.</p>
207 <p>Önbellekteki içerik bayatsa, <module>mod_cache</module> modülü
208 isteği bir <strong>koşullu istek</strong> haline getirir. Özgün
209 sunucu normal bir yanıt verirse bu yanıt mevcut içeriğin yerine
210 önbelleklenir. Özgün sunucu bir <code>304 Not Modified</code> yanıtı
211 verirse içerik tekrar taze olarak imlenir ve önbellekteki içerik
212 süzgeç tarafından kaydedilmeden sunulur.</p>
216 <title>Önbelleğin Hızlandırılması</title>
218 <p>Bir sanal konak birçok farklı sunucu takma adından biri olarak
219 bilindiği takdirde <directive
220 module="core">UseCanonicalName</directive> yönergesine <code>On</code>
221 değeri atanmışsa önbellekten sunulan sayfa sayısında büyük bir artış
222 olduğu görülür. Bunun sebebi içeriği sunan sanal konağın isminin
223 önbellek anahtarının içinde kullanılmasıdır. Yönergeye
224 <code>On</code> değerini atamak suretiyle çok isimli ve rumuzlu sanal
225 konaklar için farklı önbellek girdileri oluşturulmaz, bunun yerine her
226 meşru sanal konak için ayrı bir önbellek tutulur.</p>
230 <title>Tazelik Ömrü</title>
232 <p>Önbelleklenmek üzere tasarlanmış iyi biçimli bir içerik tazelik ömrünü
233 <code>Cache-Control</code> başlığının <code>max-age</code> veya
234 <code>s-maxage</code> alanlarıyla ya da bir <code>Expires</code>
235 başlığını içererek bildirmelidir.</p>
237 <p>Aynı zamanda, özgün sunucunun tanımladığı tazelik ömrü, bir istemci
238 tarafından istekte bir <code>Cache-Control</code> başlığı kullanılarak
239 geçersiz kılınmak istenebilir. Bu durumda hangi tazelik ömrü daha
240 kısaysa o geçerli olur.</p>
242 <p>Tazelik ömrü istekte veya yanıtta mevcut değilse öntanımlı bir tazelik
243 ömrü kullanılır. Öntanımlı tazelik ömrü önbellekli içerik için bir saat
244 olmakla birlikte <directive
245 module="mod_cache">CacheDefaultExpire</directive> yönergesi
246 kullanılarak kolayca değiştirilebilir.</p>
248 <p>Bir yanıt <code>Expires</code> başlığını değil de
249 <code>Last-Modified</code> başlığını içeriyorsa
250 <module>mod_cache</module> tazelik ömrünü <directive
251 module="mod_cache">CacheLastModifiedFactor</directive> yönergesine
254 <p>Yerel içerik için, ya da kendi <code>Expires</code> başlığını
255 tanımlamayan uzak içerik için tazelik ömrünü <code>max-age</code> ve
256 <code>Expires</code> ekleyerek hassas olarak ayarlamak
257 için <module>mod_expires</module> kullanılabilir.</p>
259 <p>Tazelik ömrünün üst sınırı <directive
260 module="mod_cache">CacheMaxExpire</directive> yönergesi ile
265 <title>Şartlı İstekler için Özlü Kılavuz</title>
267 <p>Önbellekteki içeriğin zaman aşımına uğrayıp bayat hale gelmesi,
268 httpd’nin özgün isteği aktarmak yerine isteği değişikliğe uğratarak
269 şartlı bir istek yapması sonucunu doğurur.</p>
271 <p>Özgün önbellekli yanıtta bir <code>ETag</code> başlığı mevcutsa,
272 <module>mod_cache</module> modülü özgün sunucuya yapılan isteğe
273 bir <code>If-None-Match</code> başlığı ekler.
274 Özgün önbellekli yanıtta bir <code>Last-Modified</code> başlığı
275 mevcutsa, <module>mod_cache</module> modülü özgün sunucuya yapılan
276 isteğe bir <code>If-Modified-Since</code> başlığı ekler. Bunlardan
277 birinin varlığı isteği <strong>koşullu</strong> yapar.</p>
279 <p>Bir koşullu istek özgün sunucu tarafından alındığında, özgün sunucu
280 <code>ETag</code> veya <code>Last-Modified</code> başlığının isteğe
281 uygun olarak değişip değişmediğine bakmalıdır. Değişmemişse, özgün
282 sunucu kısa ve öz bir "304 Not Modified" yanıtı ile yanıt vermelidir.
283 Bunun önbellekteki anlamı şudur: Eskimiş içerik hala tazedir ve içerik
284 yeni tazelik ömrüne ulaşıncaya kadar sonraki isteklerde
287 <p>İçerik değişmişse, bir şartlı istek yapılmamış gibi içeriğin kendisi
290 <p>Şartlı istekler çifte yarar sağlar. Birinci olarak, böyle bir istek
291 özgün sunucuya yapılıyorsa ve iki içerik de aynıysa bunu saptamak kolay
292 olur ve özkaynağın tamamını aktarma külfetinden kurtulunur.</p>
294 <p>İkinci olarak, iyi tasarlanmış bir özgün sunucu, koşullu istekler tam
295 bir yanıt üretmekten önemli ölçüde ucuz olacak şekilde tasarlanmış
296 olacaktır. Durağan dosyalar için bu genellikle
297 <code>stat()</code> veya benzeri bir sistem çağrısıyla dosya
298 boyutları ve değişiklik zamanına bakmak şeklinde gerçekleşir.
299 Böylelikle, yerel içeriği bir değişiklik olmadığı takdirde önbellekten
300 sunmak daha hızlı olacaktır.</p>
302 <p>Özgün sunucular koşullu istekleri desteklemek için her türlü çabayı
303 göstermelidir. Ancak, koşullu istekler desteklenmiyorsa, özgün sunucu
304 istek koşullu değilmiş gibi yanıt vermeli, önbellek ise, içerik
305 değişmiş ve yani içerik önbelleğe kaydedilmiş gibi yanıt vermelidir. Bu
306 durumda, önbellek basit bir iki durumlu (içerik ya tazedir ya da
307 silinmiş) önbellek gibi davranacaktır.</p>
311 <title>Neler Önbelleklenebilir?</title>
313 <p>HTTP önbelleğin tarafından önbelleklenebilecek içerik
314 <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.4">
315 RFC2616 Section 13.4 Response Cacheability</a> belgesinde tanımlanmış
316 olup, bunlar şöyle özetlenebilir:</p>
319 <li>Önbellekleme bu URL ile etkin kılınabilmelidir. <directive
320 module="mod_cache">CacheEnable</directive> ve <directive
321 module="mod_cache">CacheDisable</directive> yönergelerine bakınız.</li>
323 <li>Yanıtın HTTP durum kodu 200, 203, 300, 301 veya 410 olmalıdır.</li>
325 <li>İstek bir HTTP GET isteği olmalıdır.</li>
327 <li>Eğer yanıt bir "Authorization:" başlığı içeriyorsa ayrıca
328 "Cache-Control:" başlığında da "s-maxage", "must-revalidate" veya
329 "public" değerlerinden birini içermelidir, aksi takdirde
332 <li>Eğer URL (GET yöntemi kullanan bir HTML formunun yaptığı gibi) bir
333 sorgu dizgesi içeriyorsa yanıt, RFC2616’nın 13.9. bölümünde
334 açıklandığı gibi bir "Expires:" başlığı içermedikçe veya
335 "Cache-Control:" başlığının max-age veya max-age yönergesini
336 içermedikçe yanıt içeriği önbelleğe alınmayacaktır.</li>
338 <li><directive module="mod_cache">CacheIgnoreNoLastMod</directive>
339 yönergesinin kullanımını gerektiren bir durum olmadıkça 200 durum
340 koduna sahip bir yanıtın "Etag", "Last-Modified" ve "Expires"
341 başlıklarından birini veya "Cache-Control:" başlığının "max-age" veya
342 "s-maxage" yönergelerinden birini (en azından) içermesi gerekir.</li>
344 <li><directive module="mod_cache">CacheStorePrivate</directive>
345 yönergesinin kullanımını gerektiren bir durum olmadıkça yanıt
346 "private" değerli bir "Cache-Control:" başlığı içerdiği takdirde
347 yanıtın içeriği önbelleğe alınmayacaktır.</li>
349 <li>Benzer şekilde, <directive module="mod_cache"
350 >CacheStoreNoStore</directive> yönergesi kullanılmamışsa yanıt
351 "no-store" değerli bir "Cache-Control:" başlığı içeriyorsa yanıt
352 içeriği önbelleğe alınmayacaktır.</li>
354 <li>Herşeyle eşleşen "*" değerli bir "Vary:" başlığı içeren bir
355 yanıtın içeriği önbelleğe alınmaz.</li>
360 <title>Neler Önbelleklenmemeli?</title>
362 <p>İçerik zamana bağımlıysa ya da istek kısmen bile olsa HTTP uzlaşımıyla
363 bağdaşmıyorsa önbelleğe alınmamalıdır. Bu içerik önbelleklenemeyeceğini
364 <code>Cache-Control</code> başlığını kullanarak sunucuya
367 <p>İçerik sıkça değişiyorsa, tazelik ömrü dakikalar veya saniyelerle
368 ifade ediliyorsa, içerik yine de önbelleklenebilir. Ancak, tam
369 yanıtların düzenli olarak üretilmemesinin temini için özgün sunucunun
370 <strong>koşullu istekleri</strong> doğru olarak desteklemesi
373 <p>İstemcinin sağladığı istek başlıklarına dayanarak değişen içerik,
374 <code>Vary</code> yanıt başlığının akıllıca kullanımıyla
375 önbelleklenebilir.</p>
379 <title>Değişken/Uzlaşımlı İçerik</title>
381 <p>Özgün sunucu, istekteki başlık değerlerine dayanarak farklı
382 içeriklerle yanıt vermeye ayarlandığı takdirde, örneğin aynı URL'de
383 farklı dillerde içerik sunmak gibi, HTTP'nin önbellekleme mekanizması
384 aynı URL'de aynı sayfanın değişik sürümlerini önbelleklemeyi mümkün
387 <p>Bu özgün sunucu tarafından bir <code>Vary</code> başlığı eklenerek
388 yapılır. Bir sayfanın farklı sürümleri arasındaki farkları saptarken
389 önbellek tarafından hangi başlıkların hesaba katılacağını
390 <code>Vary</code> başlığı belirler.</p>
392 <p>Örneğin, bir yanıt şöyle bir başlık ile alınmışsa,</p>
395 Vary: negotiate,accept-language,accept-charset
398 <p><module>mod_cache</module> sadece accept-language ve accept-charset
399 başlıkları özgün istekle eşleşen önbellekli içeriği sunacaktır.</p>
401 <p>İçeriğin farklı sürümleri yan yana önbelleklenebilir.
402 <module>mod_cache</module> modülü <code>Vary</code> başlığını
403 kullanarak başlıkta listelenmiş istek başlıklarının uygun değerlerini
404 saptar ve istemciye hangi sürümle yanıt verileceğine karar verir.</p>
408 <title>Disk Üzerinde Önbellekleme</title>
410 <p><module>mod_cache</module> modülü önbelleği yönetmek için çeşitli
411 depolama ortamlarına özgü gerçeklenimleri kullanır. Diske önbellekleme
412 desteğini <module>mod_cache_disk</module> sağlar.</p>
414 <p>Tipik olarak modül şöyle yapılandırılır:</p>
417 CacheRoot /var/cache/apache/<br />
418 CacheEnable disk /<br />
419 CacheDirLevels 2<br />
423 <p>En önemlisi önbelleklenen dosyaların yerel olarak saklanması olup
424 işletim sisteminin sağladığı bellekiçi önbelleklemeden de ayrıca
425 faydalanılmış olur. Bu bakımdan, dosyalar disk üzerinde saklansa bile
426 sıkça erişilen dosyalar işletim sistemi sayesinde aslında bellekten
427 sunulmuş olacaklardır.</p>
431 <title>Önbellekte Saklamanın Anlamı</title>
433 <p><module>mod_cache_disk</module> öğeleri önbellekte saklamak için
434 istek yapılan URL’nin 22 karakterlik özetini oluşturur. Bu özet, çok
435 sayıda URL’nin aynı özeti oluşturmaması için konak ismi, protokol,
436 port ve varsa CGI argümanlarından başka <code>Vary</code> başlığında
437 tanımlı elemanlardan oluşur.</p>
439 <p>Özeti oluşturan karakterler 64 karakterlik bir karakter kümesinden
440 seçildiğinden oluşturulması olası farklı özet sayısı 64^22’dir.
441 Örneğin, bir URL’nin <code>xyTGxSMO2b68mBCykqkp1w</code> gibi bir
442 özeti olabilir. Bu özet, bu URL ile erişilen dosyalar önbellek içinde
443 saklanırken dosya ismi öneki olarak kullanılır. Ancak bununla
444 yetinilmez ve içerik <directive
445 module="mod_cache_disk">CacheDirLevels</directive> ve <directive
446 module="mod_cache_disk">CacheDirLength</directive> yönergelerinin
447 değerlerine göre önce dizinlere ayrılır.</p>
449 <p><directive module="mod_cache_disk">CacheDirLevels</directive>
450 yönergesi kaç alt seviye dizin olacağını ve <directive
451 module="mod_cache_disk">CacheDirLength</directive> her dizinde kaç
452 karakter olacağını belirler. Örneğin, yukarıdaki
453 özete sahip bir dosyanın isminin başına yukarıdaki yapılandırma
454 örneğine uygun olarak
455 <code>/var/cache/apache/x/y/TGxSMO2b68mBCykqkp1w</code> gibi bir önek
458 <p>Bu tekniğin asıl amacı belli bir dizin içinde bulunabilecek
459 dosyaların ve alt dizinlerin sayısını düşük tutmaktır. Bu sayının
460 büyük olması çoğu işletim sisteminde başarımın düşmesine sebep olur.
461 <directive module="mod_cache_disk">CacheDirLength</directive>
462 yönergesi "1" değeriyle kullanıldığında her dizin altında en fazla 64
463 alt dizin veya dosya açılabilir. "2" değeriyle kullanıldığında ise bu
464 sayı 64^2’ye yükselir ve böyle artarak gider. İyi bir sebebiniz
466 module="mod_cache_disk">CacheDirLength</directive> için değer olarak
467 "1" belirtmenizi öneririz.</p>
469 <p><directive module="mod_cache_disk">CacheDirLevels</directive>
470 yönergesine atanacak değer önbellekte saklamayı düşündüğünüz olası
471 dosya sayısı ile ilgilidir. Yukarıdaki örnekte olduğu gibi "2"
472 değerini belirtirseniz, toplamda en fazla 4096 dizin oluşturulabilir.
473 1 milyon dosyanın önbelleklendiği bir durumda bu, her dizinde yaklaşık
474 olarak 245 önbelleklenmiş URL demektir.</p>
476 <p>Her URL için önbellekte en az iki dosya saklanır. Biri genellikle URL
477 hakkındaki temel verilerden oluşan ".header" dosyasıdır, diğeri ise
478 sunulacak içeriğin bire bir kopyası olan ".data" dosyasıdır.</p>
480 <p>"Vary" başlığı üzerinden içeriğin uzlaşıldığı durumda URL için bir
481 ".vary" dizini oluşturulur. Bu dizin her biri farklı bir uzlaşıma ait
482 çok sayıda ".data" dosyası içerebilir.</p>
486 <title>Disk Önbelleğinin Bakımı</title>
488 <p><module>mod_cache_disk</module> zaman aşımına uğrayan önbellekli
489 içeriği silse de önbelleğin toplam boyu ve ne kadar boş bellek kaldığı
490 hakkında bilgi vermez.</p>
492 <p>Bunun yerine httpd önbellek içeriğini düzenli aralıklarla
493 temizleyebilmeniz için <program>htcacheclean</program> adında bir araç
494 içerir. Önbellek için azami ne kadar yer kullanılacağının ve bunun
495 üzerinde <program>htcacheclean</program>’i hangi sıklıkta
496 çalıştırılacağının tespiti biraz karmaşık bir işlem olup uygun değerler
497 genellikle deneme yanılma yoluyla bulunur.</p>
499 <p><program>htcacheclean</program> iki işlem kipine sahiptir. Kalıcı bir
500 artalan süreci olarak çalışabileceği gibi cron üzerinden belli
501 aralıklarla da çalıştırılabilir. Çok büyük (onlarca GB) önbelleklerde
502 <program>htcacheclean</program>’in işini bitirmesi 1 saatten fazla
503 sürebileceğinden, cron ile çalıştırma durumunda aynı anda birden fazla
504 kopyanın çalışıyor durumda olmaması için
505 <program>htcacheclean</program>’in çalıştırılma aralığını iyi
506 belirlemek gerekir.</p>
508 <p>Ayrıca, <program>htcacheclean</program> için uygun bir "nice" seviyesi
509 seçilmesi önerilr. Böylece, sunucu çalışırken aracın ölçüsüz disk g/ç
510 yapmasına sebebiyet verilmemiş olur.</p>
513 <img src="images/caching_fig1.tr.png" alt="" width="600"
514 height="406" /><br />
515 <a id="figure1" name="figure1"><dfn>Şekil 1</dfn></a>:
516 Önbelleğin büyümesi ve düzenli aralıklarla temizlenmesi.</p>
518 <p><module>mod_cache_disk</module> ne kadar bellek kullanıldığı hakkında
519 bilgi vermediğinden, <program>htcacheclean</program>'in bir temizliğin
520 ardından yeterli bir büyüme alanı kalacak şekilde yapılandırılması
521 temin edilmelidir.</p>
526 <section id="socache-caching">
527 <title>İki durumlu Anahtar/Değer Paylaşımlı Nesne Önbellekleme</title>
531 <module>mod_authn_socache</module>
532 <module>mod_socache_dbm</module>
533 <module>mod_socache_dc</module>
534 <module>mod_socache_memcache</module>
535 <module>mod_socache_shmcb</module>
536 <module>mod_ssl</module>
539 <directive module="mod_authn_socache">AuthnCacheSOCache</directive>
540 <directive module="mod_ssl">SSLSessionCache</directive>
541 <directive module="mod_ssl">SSLStaplingCache</directive>
545 <p>Apache HTTP sunucusu, SSL oturumları, kimlik doğrulama bilgileri gibi
546 önbelleklenebilen özel bilgiler için <a href="socache.html">socache</a>
547 arayüzü içinde düşük seviyeli bir paylaşımlı nesne önbelleğine
550 <p>Her gerçeklenime uygun ek modüller de sağlanmıştır:</p>
553 <dt><module>mod_socache_dbm</module></dt>
554 <dd>DBM tabanlı paylaşımlı nesne önbelleklemesi.</dd>
555 <dt><module>mod_socache_dc</module></dt>
556 <dd>Distcache tabanlı paylaşımlı nesne önbelleklemesi.</dd>
557 <dt><module>mod_socache_memcache</module></dt>
558 <dd>Memcache tabanlı paylaşımlı nesne önbelleklemesi.</dd>
559 <dt><module>mod_socache_shmcb</module></dt>
560 <dd>Paylaşımlı belleğe dayalı paylaşımlı nesne önbelleklemesi.</dd>
563 <section id="mod_authn_socache-caching">
564 <title>Kimlik Doğrulama Bilgilerinin Önbelleklenmesi</title>
568 <module>mod_authn_socache</module>
571 <directive module="mod_authn_socache">AuthnCacheSOCache</directive>
575 <p><module>mod_authn_socache</module> modülü kimlik doğrulama araçlarının
576 yükünün hafifletilmesini, kimlik doğrulama sonucunun önbelleklenmesini
580 <section id="mod_ssl-caching">
581 <title>SSL Oturumlarının Önbelleklenmesi</title>
585 <module>mod_ssl</module>
588 <directive module="mod_ssl">SSLSessionCache</directive>
589 <directive module="mod_ssl">SSLStaplingCache</directive>
593 <p><module>mod_ssl</module> modülü, oturum önbelleği ve önbellek
594 zımbalaması sağlamak için <code>socache</code> arayüzünü kullanır.</p>
598 <section id="file-caching">
599 <title>Uzmanlaşmış Dosya Önbellekleme</title>
603 <module>mod_file_cache</module>
606 <directive module="mod_file_cache">CacheFile</directive>
607 <directive module="mod_file_cache">MMapFile</directive>
611 <p>Dosya sisteminin yavaş olabildiği veya dosya tanıtıcılarının
612 kullanımının pahalıya mal olduğu sistemlerde, sunucunun başlatılması
613 sırasında dosyaların belleğe yüklenmesi seçeneği vardır.</p>
615 <p>Dosyaların açılmasının yavaş olduğu sistemlerde, dosyaların sunucunun
616 başlatılması sırasında açılması ve dosya tanıtıcısını önbelleklenmesi
617 seçeneği vardır. Bu seçeneklerin duruk dosyalara erişimin yavaş olduğu
618 sistemlere de bir yardımı olabilir.</p>
620 <section id="filehandle">
621 <title>Dosya Tanıtıcı Önbelleklemesi</title>
623 <p>Bir dosyanın açılması işlemi, özellikle de ağ dosya sistemlerinde
624 bulunan dosyalar için önemli bir gecikme kaynağı olabilir. Önbellekte,
625 çok sunulan dosyaların kendilerinin değil, açık dosya tanıtıcılarının
626 saklanması httpd’yi bu tür gecikmelerden koruyabilir. httpd’de tek
627 türde dosya tanıtıcı önbelleklemesi yapılabilmektedir.</p>
630 <title><code>CacheFile</code> yönergesi ile</title>
632 <p>httpd’de mevcut önbelleklemenin en temel şekli
633 <module>mod_file_cache</module> tarafından sağlanan dosya tanıtıcı
634 önbelleklemesidir. Bu önbellek türü dosyaların kendilerini değil açık
635 dosya tanıtıcılarının bir listesini saklar. Dosyaların bu anlamda
636 önbelleklenmesi, <directive module="mod_file_cache"
637 >CacheFile</directive> yönergesi yapılandırma dosyasında belirtilerek
640 <p><directive module="mod_file_cache">CacheFile</directive> yönergesi
641 belirtilen dosyanın httpd başlatıldığında açılmasını ve dosya için
642 yapılan sonraki her istekte bu dosya tanıtıcısının kullanılmasını
646 CacheFile /usr/local/apache2/htdocs/index.html
649 <p>Büyük miktarda dosyayı bu anlamda önbelleklemeyi tasarlıyorsanız
650 işletim sisteminizin açık dosya tanıtıcılarının sayısı ile ilgili
651 sınırlamasını uygun bir değere ayarlamanız gerekebilir.</p>
653 <p><directive module="mod_file_cache">CacheFile</directive> yönergesini
654 kullandığınız takdirde dosya içeriğindeki değişiklikleri anında
655 isteğe yansıtamazsınız. httpd dosyayı ilk başlatıldığındaki haliyle
658 <p>Eğer httpd çalışırken dosya silinmişse httpd ilk başlatıldığındaki
659 haline ilişkin dosya tanıtıcıyı sağlamaya ve dolayısıyla dosya
660 içeriğini sunmaya devam edecektir. Yani, dosya silinmiş ve artık
661 dosya sisteminde görünmüyor olsa bile httpd durdurulup dosya
662 tanıtıcıları kapanmadıkça dosyaların silinmesiyle açılan yer serbest
668 <section id="inmemory">
669 <title>Sistem Belleğinde Önbellekleme</title>
671 <p>İçeriğin sistem belleğinden sunulması içerik sunmanın evrensel olarak
672 en hızlı yoludur. Dosyaların bir disk denetleyiciden okunması ya da daha
673 kötüsü uzak bir ağdan okunması bellekten okumayla karşılaştırılamayacak
674 ölçüde yavaş işlemlerdir. Disk denetleyiciler genellikle fiziksel
675 süreçleri denetlerler. Ağ erişimi ise band genişliği sınırlamalarından
676 etkilenir. Halbuki bellek erişimi sadece nano saniyeler mertebesinde
679 <p>Sistem belleği en pahalı saklama ortamı olması sebebiyle en verimli
680 şekilde kullanımı önemlidir. Dosyaları sistem belleğinde saklamakla
681 sistemin kullanabileceği bellek miktarını azaltmış olursunuz. İşletim
682 sistemi önbelleklemesinde göreceğiniz gibi bu öyle basit bir konu
683 değildir. httpd’nin kendi kullandığı belleğin bir kısmını önbellek
684 olarak ayırırken çok fazla bellek kullanmamak önemlidir. Aksi takdirde
685 işletim sistemi belleğin yetmediği noktada belleği diske
686 takaslayacağından istenen başarım artışı sağlanamayacaktır.</p>
689 <title>İşletim Sistemi Önbelleklemesi</title>
691 <p>Günümüz iştetim sistemlerinin hemen hemen tamamında bellek içi
692 dosya/veri saklama işlemlerini çekirdek yönetir. Bu güçlü bir
693 özelliktir ve işletim sistemlerinin büyük çoğunluğu bunu böyle yapar.
694 Örneğin, Linux’ta bir dosyanın ilk defa okunduğunda ve ikinci kez
695 okunduğunda işlemcinin ne kadar meşgul edildiğine bakalım:</p>
698 colm@coroebus:~$ time cat testfile > /dev/null<br />
702 colm@coroebus:~$ time cat testfile > /dev/null<br />
708 <p>Küçük bir dosya için bile okuma süresi bakımından büyük fark ortaya
709 çıkmaktadır. Bunun sebebi çekirdeğin dosya içeriğini bellek daha
710 güncel amaçlar için lazım olana dek bellek içinde saklamasıdır.</p>
712 <p>Sisteminizde yeterince yedek bellek olduğundan eminseniz, bu
713 önbellekte daha fazla dosya saklanacağından emin olabilirsiniz.
714 Bundan, önbelleğin sistem belleğinde verimli biçimde tutulması için
715 httpd’de ek bir yapılandırmaya gidilmesinin gerekmediği sonucu
718 <p>Bundan başka, işletim sistemi dosyaların değiştiği ve silindiği
719 zamanları bildiğinden bu tür dosyaların içerikleri gerektiğinde
720 önbellekten kendiliğinden silinmiş olur. Bellek içinde dosya
721 saklarken dosyaların değiştirilme zamanlarını bilme olanağı
722 olmadığından bu durum httpd’ye büyük yarar sağlar.</p>
725 <p>İşletim sisteminin dosyaların önbelleklenmesi için sağladığı bunca
726 yarara ve başarım artışına karşın bellek içinde dosya önbelleklemenin
727 httpd tarafından yerine getirilmesinin daha iyi olacağı bazı durumlar
731 <title><code>MMapFile</code> yönergesi ile</title>
733 <p><module>mod_file_cache</module> modülü, bir durağan dosyanın
734 içeriğini sunucunun başlatılması sırasında (mmap sistem çağrısıyla)
735 belleğe eşlenmesini mümkün kılmak için <directive
736 module="mod_file_cache" >MMapFile</directive> yönergesini sağlar.
737 httpd bu dosyaya gelecek sonraki istekler için dosyanın bellekiçi
738 içeriğini kullanacaktır.</p>
741 MMapFile /usr/local/apache2/htdocs/index.html
744 <p><directive module="mod_file_cache">CacheFile</directive>
745 yönergesinde olduğu gibi bu dosyalarda httpd başlatıldıktan sonra
746 yapılacak bir değişiklikten httpd’nin haberi olmayacaktır.</p>
748 <p><directive module="mod_file_cache">MMapFile</directive> yönergesi
749 ayırdığı belleğin toplam miktarı ile ilgilenmez, dolayısıyla
750 yönergenin aşırı kullanımından kaçınmalısınız. httpd’nin çocuk
751 süreçlerinin her biri bu belleğin kendilerine ait birer kopyasını
752 yapacağından belleğe eşlenen dosyaların çok yer kaplamaması büyük
753 önem taşımaktadır; aksi takdirde işletim sistemi belleği diske
754 takaslayacağından beklenen fayda sağlanamayacaktır.</p>
759 <section id="security">
760 <title>Güvenlik Kaygıları</title>
763 <title>Erişim Denetimi ve Yetkilendirme</title>
765 <p><directive module="mod_cache">CacheQuickHandler</directive>
766 yönergesine <code>On</code> değerinin atandığı öntanımlı durumda
767 <module>mod_cache</module> kullanımı, daha çok sunucunun önüne
768 vidalanmış önbelleklemeli bir karşı vekile sahip olmak gibidir. Özgün
769 sunucunun bir harici önbellekmiş gibi sorgulanmasını gerektirmeyen tüm
770 istekler önbellekleme modülü tarafından karşılanacaktır. Bu durum
771 httpd'nin güvenlik modelini büyük ölçüde değiştirir.</p>
773 <p>Olası <code>.htaccess</code> dosyalarının dosya sisteminin tamamında
774 taranması çok pahalı bir işlem olduğundan <module>mod_cache</module>,
775 (işlemi hızlandırmak için) önbelleğe almanın temel amacını kısmen
776 gözardı ederek, önbellekteki içeriğin sunumu için gerekli
777 yetkilendirmenin olup olmadığı konusunda bir karar üretmez. Başka bir
778 deyişle, eğer <module>mod_cache</module> bir kısım içeriği önbelleğe
779 almışsa içerik zaman aşımına uğramadığı sürece bu içerik önbellekten
782 <p>Örneğin, yapılandırmanız bir özkaynağa IP adresine göre erişime izin
783 veriyorsa bu içeriğin önbelleğe alınmayacağından emin olmalısınız.
784 Bunu <directive module="mod_cache">CacheDisable</directive>
785 yönergesini veya <module>mod_expires</module> modülünü kullanarak
786 yapabilirsiniz. Bunu yapmaz, olayı kendi haline bırakırsanız
787 <module>mod_cache</module> bir karşı vekil gibi çalışarak sunulan her
788 içeriği önbelleğe alacak ve hangi IP adresinden gelirse gelsin her
789 istemciye bunu sunacaktır.</p>
791 <p><directive module="mod_cache">CacheQuickHandler</directive>
792 yönergesine <code>Off</code> atandığı takdirde, istek işleme
793 aşamalarının tamamı yerine getirilir ve güvenlik modeli değişmeden
798 <title>Yerel İstismarcılar</title>
800 <p>Son kullanıcılarıın isteklerine önbellekten hizmet sunulduğundan
801 önbelleğin kendisi içerikle etkileşime geçmek isteyenlerin veya
802 içeriği tahrif etmek isteyenlerin hedefi haline gelebilir. httpd’yi
803 çalıştıran kullanıcı tarafından her zaman önbelleğe yazılabileceğini
804 akıldan çıkarmamak önemlidir. Bu durumda alışılmışın tersine tüm
805 içeriğin Apache kullanıcısı tarafından yazılamamasının sağlanması
808 <p>Eğer Apache kullanıcısı, örneğin bir CGI sürecindeki açık nedeniyle
809 tehlikeye atılırsa, önbellek hedef alınabilir.
810 <module>mod_cache_disk</module> kullanılırken önbellekteki bir öğeyi
811 değiştirmek veya önbelleğe yeni bir öğe eklemek görece daha
814 <p>Bu risk, Apache kullanıcısını kullanan diğer saldırı türleriyle
815 karşılaştırıldığında daha yüksektir. <module>mod_cache_disk</module>
816 kullanıyorsanız şunları aklınızdan çıkarmayın: (1) httpd güvenlik
817 güncellemelerini takip edin ve sunucunuzu buna göre güncelleyin. (2)
818 Mümkünse <a href="suexec.html">suEXEC</a> kullanarak CGI süreçlerini
819 Apache kullanıcısı olmayan bir kullanıcının aidiyetinde çalıştırın.</p>
823 <title>Önbellek Zehirlenmeleri</title>
825 <p>httpd bir önbellekli vekil sunucu olarak çalıştığında önbellek
826 zehirlenmesi adı verilen sorunla karşılaşılma olasılığı vardır.
827 Önbellek zehirlenmesi, vekil sunucunun özgün sunucudan yanlış (ve
828 genellikle istenmeyen) içerik almasına sebep olan bir saldırı türünü
829 betimlemek için yaygın olarak kullanılan bir terimdir.</p>
831 <p>Örneğin httpd’nin çalıştığı sistemin kullandığı DNS sunucuları DNS
832 önbellek zehirlenmesinden etkilenebilecek durumdaysa, bir saldırgan
833 httpd’nin istekleri almak için başvuracağı kaynak sunucunun yerini
834 değiştirebilir. Diğer bir örnek, HTTP istek kaçakçılığı adı verilen
835 bir saldırı türüdür.</p>
837 <p>Bu belge HTTP istek kaçakçılığını derinliğine incelenmesi için uygun
838 yer değildir (böyle kaynaklara arama motorunuzla erişebilirsiniz).
839 Bununla birlikte, vekil tarafından kaynak sunucudan alınan içeriği
840 tamamen denetim altına almak amacıyla kaynak sunucudaki bir açığı
841 istismar etmeye yönelik bir dizi istek yapılabileceğinin olasılık
842 dahilinde olduğunu bilmenizde yarar vardır.</p>
846 <title>Hizmet Reddi / Önbelleğin Engellenmesi</title>
848 <p>Vary mekanizması aynı URL'nin çok sayıda sürümünün yan yana
849 önbelleklenmesini mümkün kılar. İstemci tarafından sağlanan başlık
850 değerlerine bağlı olarak, önbellek istemciye gönderilecek doğru yanıtı
851 bulacaktır. Normal kullanımda olası değerlerin çok geniş olduğunun
852 bilindiği durumda bir başlığı (örn, <code>User-Agent</code>)
853 değişikliğe uğratma çabası bu mekanizmayı bir sorun haline getirebilir.
854 Sitenin tanınırlığına bağlı olarak aynı URL'nin binlerce hatta
855 milyonlarca önbellek girdisi oluşabilir ve bunlar önbellekteki diğer
856 girdilerin yerini alabilir.</p>
858 <p>Diğer yandan, belli bir özkaynağın URL'sinin her istekte
859 değiştirilmesi ihtiyacı ortaya çıkabilir. Bu normalde URL dizgesine bir
860 "cachebuster" dizgesi eklenerek yapılır. Bu içerik sunucu tarafından
861 anlamlı bir tazelik ömrüyle önbelleklenebilir olarak imlenmişse bu
862 girdiler kısa zamanda önbellekteki meşru girdilerin yerini alabilir.
863 <module>mod_cache</module> modülü bunun önlenmesi için <directive
864 module="mod_cache">CacheIgnoreURLSessionIdentifiers</directive>
865 yönergesine sahipse de bu yönerge, yoldaki vekillerin veya tarayıcı
866 önbelleklerinin aynı hizmet reddi saldırısına maruz kalmamaları için
867 dikkatle kullanılmalıdır.</p>