|  | <?xml version="1.0" encoding="UTF-8" ?> | 
|  | <!DOCTYPE manualpage SYSTEM "style/manualpage.dtd"> | 
|  | <?xml-stylesheet type="text/xsl" href="style/manual.tr.xsl"?> | 
|  | <!-- English Revision: 711521 --> | 
|  | <!-- ===================================================== | 
|  | Translated by: Nilgün Belma Bugüner <nilgun belgeler.org> | 
|  | Reviewed by: Orhan Berent <berent belgeler.org> | 
|  | ========================================================== --> | 
|  |  | 
|  | <!-- | 
|  | Licensed to the Apache Software Foundation (ASF) under one or more | 
|  | contributor license agreements.  See the NOTICE file distributed with | 
|  | this work for additional information regarding copyright ownership. | 
|  | The ASF licenses this file to You under the Apache License, Version 2.0 | 
|  | (the "License"); you may not use this file except in compliance with | 
|  | the License.  You may obtain a copy of the License at | 
|  |  | 
|  | http://www.apache.org/licenses/LICENSE-2.0 | 
|  |  | 
|  | Unless required by applicable law or agreed to in writing, software | 
|  | distributed under the License is distributed on an "AS IS" BASIS, | 
|  | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | See the License for the specific language governing permissions and | 
|  | limitations under the License. | 
|  | --> | 
|  |  | 
|  | <manualpage metafile="caching.xml.meta"> | 
|  |  | 
|  | <title>Önbellek Kullanım Kılavuzu</title> | 
|  |  | 
|  | <summary> | 
|  | <p>Bu belge <module>mod_cache</module>, | 
|  | <module>mod_disk_cache</module>, <module>mod_file_cache</module> | 
|  | modülleri ve <a href="programs/htcacheclean.html">htcacheclean</a> | 
|  | için bir başvuru kılavuzu niteliğindedir. HTTP sunucusu ve vekil | 
|  | olarak çalışmada işlemleri hızlandırmak için bilinen sorunlar ve | 
|  | yanlış yapılandırmalardan kaçınarak Apache’nin önbellekleme | 
|  | özelliklerinin nasıl kullanılacağı açıklanmıştır.</p> | 
|  | </summary> | 
|  |  | 
|  | <section id="introduction"> | 
|  | <title>Giriş</title> | 
|  |  | 
|  | <p>Apache HTTP sunucusunun 2.2 sürümünden itibaren | 
|  | <module>mod_cache</module> ve <module>mod_file_cache</module> modülleri | 
|  | deneysel olmaktan çıkarılmış ve üretim amaçlı kullanılabileceğine karar | 
|  | verilmiştir. Bu önbellekleme mimarileri gerek HTTP sunucusu gerekse | 
|  | vekili olarak çalışmada HTTP işlemlerini hızlandırmak anlamında sunucuya | 
|  | güç katarlar.</p> | 
|  |  | 
|  | <p><module>mod_cache</module>, ortam sağlayıcı modülü olan | 
|  | <module>mod_disk_cache</module> ile birlikte HTTP önbelleklemesini | 
|  | akıllıca yerine getirir. İçeriğin kendisi önbellekte saklanırken | 
|  | <module>mod_cache</module> içeriğin önbelleklenebilmesini denetim | 
|  | altında tutan HTTP başlıkları ve seçenekleri ile ilgilenir. Yerel ve | 
|  | vekalet edilen içeriğin her ikisinin de aynı anda işlem görmesi | 
|  | sağlanabilir. <module>mod_cache</module>, vekalet edilen içeriğe, | 
|  | devingen yerel içeriğe veya zamanla değişen yerel dosyalara erişimi | 
|  | hızlandırma ihtiyacına yönelik olarak hem basit hem de karmaşık | 
|  | önbellekleme yapılandırmalarını mümkün kılar.</p> | 
|  |  | 
|  | <p><module>mod_file_cache</module> ise biraz daha temel ancak bazen daha | 
|  | kullanışlı olabilen bir önbellekleme şekli ile ilgilenir. URL’lerin | 
|  | önbelleklenebilmesini mümkün kılmanın karmaşıklığıyla boğuşmak yerine | 
|  | <module>mod_file_cache</module>, dosyaların Apache’nin son başlatıldığı | 
|  | zamanki durumlarını saklamak için dosyaların belleğe eşlenmek üzere ele | 
|  | alınmasını sağlar. Böylelikle, <module>mod_file_cache</module>, çok sık | 
|  | değişmeyen durağan yerel dosyalara erişim zamanını azaltmaya yardım | 
|  | eder.</p> | 
|  |  | 
|  | <p><directive module="mod_file_cache">CacheFile</directive> ve <directive | 
|  | module="mod_file_cache">MMapStatic</directive> yönergeleri ile ilgili | 
|  | bölümlerde anlatılanları saymazsak <module>mod_file_cache</module>, bu | 
|  | belgenin asıl konusu olan <module>mod_cache</module> önbellekleme | 
|  | mimarisine göre daha basit bir önbellekleme gerçeklenimidir.</p> | 
|  |  | 
|  | <p>Bu belgeden azami yararı sağlayabilmek için temel bir HTTP bilginizin | 
|  | olması ve <a href="urlmapping.html">URL’lerin Dosya Sistemine | 
|  | Eşlenmesi</a> ile <a href="content-negotiation.html">İçerik Uzlaşımı</a> | 
|  | belgelerini okumuş olmanız gerekir.</p> | 
|  |  | 
|  | </section> | 
|  |  | 
|  | <section id="overview"> | 
|  |  | 
|  | <title>Önbelleklemeye Bir Bakış</title> | 
|  |  | 
|  | <related> | 
|  | <modulelist> | 
|  | <module>mod_cache</module> | 
|  | <module>mod_disk_cache</module> | 
|  | <module>mod_file_cache</module> | 
|  | </modulelist> | 
|  | <directivelist> | 
|  | <directive module="mod_cache">CacheEnable</directive> | 
|  | <directive module="mod_cache">CacheDisable</directive> | 
|  | <directive module="mod_file_cache">MMapStatic</directive> | 
|  | <directive module="mod_file_cache">CacheFile</directive> | 
|  | <directive module="mod_file_cache">CacheFile</directive> | 
|  | <directive module="core">UseCanonicalName</directive> | 
|  | <directive module="mod_negotiation">CacheNegotiatedDocs</directive> | 
|  | </directivelist> | 
|  | </related> | 
|  |  | 
|  | <p>Bir istek sonuçlanıncaya kadar <module>mod_cache</module> modülünde iki | 
|  | aşamadan geçer. İlkinde <module>mod_cache</module> bir URL eşleme modülü | 
|  | olarak çalışır ve URL önbellekteyse ve zaman aşımına uğramamışsa isteğin | 
|  | doğrudan <module>mod_cache</module> tarafından sunulmasını sağlar.</p> | 
|  |  | 
|  | <p>Yani isteğin sunumu sırasında, isteğin örneğin, | 
|  | <module>mod_proxy</module> veya <module>mod_rewrite</module> tarafından | 
|  | ele alınması gerekse bile bu yapılmaz. Önbelleklenen içerik ilk alındığı | 
|  | haliyle sunulur.</p> | 
|  |  | 
|  | <p>Eğer URL önbellekte yoksa, <module>mod_cache</module> isteği bir  <a | 
|  | href="filter.html">süzgece</a> tabi tutar. Apache içeriğin varlığını | 
|  | saptamışsa içeriğin süzgeç tarafından sunulmasını sağladıktan sonra, | 
|  | süzgeç içeriğin önbelleklenebileceğini saptamışsa gelecekte sunmak üzere | 
|  | içeriği önbelleğe kaydeder.</p> | 
|  |  | 
|  | <p>Eğer URL önbellekte bulunmuş fakat içeriğin zaman aşımına uğradığı | 
|  | anlaşılmışsa süzgeç yine de eklenir fakat bu kez | 
|  | <module>mod_cache</module> önbellekteki sürümün hala geçerli olup | 
|  | olmadığını saptamak için kaynağın bulunduğu sunucuya bir koşullu istek | 
|  | gönderir. Önbellekteki sürüm hala geçerliyse temel verileri güncellenir | 
|  | ve istek önbellekten sunulur. Önbellekteki sürüm artık geçerli değilse, | 
|  | önbellekteki sürüm silinir ve süzgeç güncel içeriği önbelleğe kaydeder | 
|  | ve isteği oradan sunar.</p> | 
|  |  | 
|  | <section> | 
|  | <title>Önbelleğin Hızlandırılması</title> | 
|  |  | 
|  | <p>Yerel içerik önbelleklendiği takdirde <directive | 
|  | module="core">UseCanonicalName</directive> yönergesine <code>On</code> | 
|  | değeri atanmışsa önbellekten sunulan sayfa sayısında büyük bir artış | 
|  | olduduğu görülür. Bunun sebebi içeriği sunan sanal konağın isminin | 
|  | önbellek anahtarının bir parçası olarak kullanılmasıdır. Yönergeye | 
|  | <code>On</code> değerini atamak suretiyle çok isimli ve rumuzlu sanal | 
|  | konaklar için farklı önbellek girdileri oluşturulmaz, bunun yerine her | 
|  | meşru sanal konak için ayrı bir önbellek tutulur.</p> | 
|  |  | 
|  | <p>Önbellekleme, URL’nin dosya ismine dönüştürülmesi aşamasında | 
|  | gerçekleştiğinden önbelleklenen belgeler sadece URL isteklerine bir | 
|  | yanıt olarak sunulurlar. <a href="howto/ssi.html">Sunucu Taraflı | 
|  | İçerikleri</a> kullanmazsanız genellikle bunun fazla bir önemi | 
|  | olmaz.</p> | 
|  |  | 
|  | <example> | 
|  | <!-- Bu içerik önbelleklenebilir. --><br /> | 
|  | <!--#include virtual="/dipnot.html" --><br /> | 
|  | <br /> | 
|  | <!-- Bu içerik önbelleklenemez. --><br /> | 
|  | <!--#include file="/bir/yol/dipnot.html" --> | 
|  | </example> | 
|  |  | 
|  | <p>Sunucu Taraflı İçerikleri kullanıyorsanız ve önbelleklemenin | 
|  | sağladığı hız artışından da yaralanmak istiyorsanız içerik | 
|  | yerleştirmek için <code>virtual</code> içerik türünü kullanınız.</p> | 
|  | </section> | 
|  |  | 
|  | <section> | 
|  | <title>Zaman Aşımı Süreleri</title> | 
|  |  | 
|  | <p>Önbellekli öğeler için öntanımlı zaman aşımı süresi bir saat olmakla | 
|  | birlikte <directive module="mod_cache">CacheDefaultExpire</directive> | 
|  | yönergesi kullanılarak bu değer kolaylıkla geçersiz kılınabilir. Bu | 
|  | öntanımlı değer sadece içeriğin özgün kaynağı bir zaman aşımı süresi | 
|  | veya son değişiklik tarihi belirtmediği takdirde kullanılır.</p> | 
|  |  | 
|  | <p>Bir yanıt <code>Expires</code> başlığını değil de | 
|  | <code>Last-Modified</code> başlığını içeriyorsa | 
|  | <module>mod_cache</module> zaman aşımı süresini <directive | 
|  | module="mod_cache">CacheLastModifiedFactor</directive> yönergesinin | 
|  | nasıl kullanıldığına bakarak saptar.</p> | 
|  |  | 
|  | <p>Yerel içerik için, zaman aşımı süresini hassas olarak ayarlamak | 
|  | gerekirse <module>mod_expires</module> kullanılabilir.</p> | 
|  |  | 
|  | <p>Zaman aşımı süresinin üst sınırı <directive | 
|  | module="mod_cache">CacheMaxExpire</directive> yönergesi ile | 
|  | belirlenebilir.</p> | 
|  |  | 
|  | </section> | 
|  |  | 
|  | <section> | 
|  | <title>Şartlı İstekler için Özlü Kılavuz</title> | 
|  |  | 
|  | <p>Önbellekteki içerik zaman aşımına uğrayıp, içerik sağlayıcıya veya | 
|  | arka sunucuya özgün isteği aktarmak yerine ayrı bir istek yapılması | 
|  | gereği Apache’nin şartlı bir istek yapması sonucunu doğurur.</p> | 
|  |  | 
|  | <p>Bir istemcinin veya önbelleğin aynı içeriğin farklı sürümleri | 
|  | arasında ayrım yapabilmesi için HTTP protokolü bazı başlık alanları | 
|  | önerir. Örneğin, "Etag:" başlığıyla sunulan bir özkaynak için | 
|  | "If-None-Match:" başlığıyla bir şartlı istek yapmak mümkün olduğu gibi | 
|  | özkaynak "Last-Modified:" başlığıyla sunuluyorsa şartlı istek | 
|  | "If-Modified-Since:" başlığıyla yapılabilir, vesaire.</p> | 
|  |  | 
|  | <p>Böyle bir şartlı istek yapıldığında yanıt koşulun içerikle eşleşip | 
|  | eşleşmediğine bağlı olarak farklı olur. Eğer istek bir | 
|  | "If-Modified-Since:" başlığıyla yapılmışsa ve içerik istekte | 
|  | belirtilen zamandan önce değiştirilmemişse kısa ve öz olarak bir "304 | 
|  | Not Modified" (Bir değişiklik yok) iletisiyle yanıt verilir.</p> | 
|  |  | 
|  | <p>Aksi takdirde  bir şartlı istek yapılmamış gibi içeriğin kendisi | 
|  | sunulur.</p> | 
|  |  | 
|  | <p>Önbellekleme ile ilgili şartlı istekler çifte yarar sağlar. Birinci | 
|  | olarak, böyle bir istek arkadaki sunucuya yapılıyorsa ve iki içerik de | 
|  | aynıysa bunu saptamak kolay olur ve özkaynağın tamamını aktarma | 
|  | külfetinden kurtulunur.</p> | 
|  |  | 
|  | <p>İkinci olarak, şartlı istekler arka sunucuda normalden daha az | 
|  | faaliyete sebep olur. Durağan dosyalar için bu genellikle | 
|  | <code>stat()</code> veya  benzeri bir sistem çağrısıyla dosya | 
|  | boyutları ve değişiklik zamanına bakmak şeklinde gerçekleşir. | 
|  | Böylelikle Apache yerel içeriği önbellekliyor olsa bile ve hatta | 
|  | içerik zaman aşımına da uğrasa önbellekteki dosyada bir değişiklik | 
|  | olmadığı takdirde içeriği önbellekten sunmak daha hızlı olacaktır. | 
|  | Çünkü dosyayı önbellekten okumak, arka sunucudan okumaktan daha | 
|  | hızlıdır (bu, bellekten okumayla diskten okumayı karşılaştırmak | 
|  | gibidir).</p> | 
|  | </section> | 
|  |  | 
|  | <section> | 
|  | <title>Neler Önbelleklenebilir?</title> | 
|  |  | 
|  | <p>Evvelce bahsedildiği gibi Apache’de iki tür önbellekleme yapılır ve | 
|  | bunlar farklı yöntemlerle çalışır. <module>mod_file_cache</module> | 
|  | önbelleklemesinde dosyalar Apache başlatıldığı zamanki içerikle | 
|  | saklanır. Bu modül tarafından önbelleğe alınmış bir dosya için istek | 
|  | geldiğinde isteğin yolu kesilip önbellekteki dosya sunulur.</p> | 
|  |  | 
|  | <p><module>mod_cache</module> önbelleklemesinde işler biraz daha | 
|  | karışıktır. Bir isteğe hizmet sunulurken istenen içerik evvelce | 
|  | önbelleklenmemişse önbellekleme modülü önce içeriğin | 
|  | önbelleklenebilirliğine bakar. Bir yanıtın önbelleklenebilirliğini | 
|  | belirleyen koşullar şunlardır:</p> | 
|  |  | 
|  | <ol> | 
|  | <li>Önbellekleme bu URL ile etkin kılınabilmelidir. <directive | 
|  | module="mod_cache">CacheEnable</directive> ve <directive | 
|  | module="mod_cache">CacheDisable</directive> yönergelerine bakınız.</li> | 
|  |  | 
|  | <li>Yanıtın HTTP durum kodu 200, 203, 300, 301 veya 410 olmalıdır.</li> | 
|  |  | 
|  | <li>İstek bir HTTP GET isteği olmalıdır.</li> | 
|  |  | 
|  | <li>İstek bir "Authorization:" başlığı içeriyorsa yanıt önbelleğe | 
|  | alınmayacaktır.</li> | 
|  |  | 
|  | <li>Eğer yanıt bir "Authorization:" başlığı içeriyorsa ayrıca | 
|  | "Cache-Control:" başlığında da "s-maxage", "must-revalidate" veya | 
|  | "public" değerlerinden birini içermelidir.</li> | 
|  |  | 
|  | <li>Eğer URL (GET yöntemi kullanan bir HTML formunun yaptığı gibi) bir | 
|  | sorgu dizgesi içeriyorsa  yanıt, RFC2616’nın 13.9. bölümünde | 
|  | açıklandığı gibi bir "Expires:" başlığı içermedikçe yanıt içeriği | 
|  | önbelleğe alınmayacaktır.</li> | 
|  |  | 
|  | <li><directive module="mod_cache">CacheIgnoreNoLastMod</directive> | 
|  | yönergesinin kullanımını gerektiren bir durum olmadıkça 200 durum | 
|  | koduna sahip bir yanıtın "Etag", "Last-Modified" ve "Expires" | 
|  | başlıklarından en az birini içermesi gerekir.</li> | 
|  |  | 
|  | <li><directive module="mod_cache">CacheStorePrivate</directive> | 
|  | yönergesinin kullanımını gerektiren bir durum olmadıkça yanıt | 
|  | "private" değerli bir "Cache-Control:" başlığı içerdiği takdirde | 
|  | yanıtın içeriği önbelleğe alınmayacaktır.</li> | 
|  |  | 
|  | <li>Benzer şekilde, <directive module="mod_cache" | 
|  | >CacheStoreNoStore</directive> yönergesi kullanılmamışsa yanıt | 
|  | "no-store" değerli bir "Cache-Control:" başlığı içeriyorsa yanıt | 
|  | içeriği önbelleğe alınmayacaktır.</li> | 
|  |  | 
|  | <li>Herşeyle eşleşen "*" değerli bir "Vary:" başlığı içeren bir | 
|  | yanıtın içeriği önbelleğe alınmaz.</li> | 
|  | </ol> | 
|  | </section> | 
|  |  | 
|  | <section> | 
|  | <title>Neler Önbelleklenmemeli?</title> | 
|  |  | 
|  | <p>Kısaca, istek zamana aşırı bağımlıysa ya da istek kısmen bile olsa | 
|  | HTTP uzlaşımıyla bağdaşmıyorsa önbelleğe alınmamalıdır.</p> | 
|  |  | 
|  | <p>İçeriği istekçinin IP adresine bağlı olarak değişen veya her beş | 
|  | dakikada bir değişikliğe uğrayan bir devingen içeriğe sahipseniz böyle | 
|  | bir içerik asla önbelleğe alınmamalıdır.</p> | 
|  |  | 
|  | <p>Diğer taraftan, içerik HTTP başlığındaki değerlere bağlı olarak | 
|  | değişiyorsa içeriğin bir "Vary" başlığı kullanılarak akıllıca | 
|  | önbelleklenmesi imkanı mevcuttur.</p> | 
|  | </section> | 
|  |  | 
|  | <section> | 
|  | <title>Değişken/Uzlaşımlı İçerik</title> | 
|  |  | 
|  | <p>"Vary" başlıklı bir yanıt arka sunucudan istenirken | 
|  | <module>mod_cache</module> tarafından alınmışsa akıllıca ele alınmaya | 
|  | çalışılacaktır. Mümkünse, <module>mod_cache</module> gelecekte bu | 
|  | içerikle ilgili isteklerin "Vary" başlıklı yanıtları olacağını | 
|  | saptayacak ve önbellekten doğru içerikle yanıt verecektir.</p> | 
|  |  | 
|  | <p>Örneğin, bir yanıt şöyle bir başlık ile alınmışsa,</p> | 
|  |  | 
|  | <example> | 
|  | Vary: negotiate,accept-language,accept-charset | 
|  | </example> | 
|  |  | 
|  | <p><module>mod_cache</module> sadece accept-language ve accept-charset | 
|  | başlıkları özgün istekle eşleşen önbellekli içeriği sunacaktır.</p> | 
|  | </section> | 
|  |  | 
|  | </section> | 
|  |  | 
|  | <section id="security"> | 
|  | <title>Güvenlik Kaygıları</title> | 
|  |  | 
|  | <section> | 
|  | <title>Erişim Denetimi ve Yetkilendirme</title> | 
|  |  | 
|  | <p><module>mod_cache</module> çoğunlukla bir karşı vekile sahip olmak | 
|  | amacıyla kullanılır. Arka sunucunun sorgulanmasını gerektirmeyen tüm | 
|  | istekler önbellekleme modülü tarafından karşılanacaktır. Yerel | 
|  | özkaynakların önbelleklenmesi söz konusu olduğunda Apache’nin güvenlik | 
|  | modeli büyükçe bir değişikliğe uğrar.</p> | 
|  |  | 
|  | <p>Olası <code>.htaccess</code> dosyalarının dosya sisteminin tamamında | 
|  | taranması çok pahalı bir işlem olduğundan <module>mod_cache</module>, | 
|  | (işlemi hızlandırmak için) önbelleğe almanın temel amacını kısmen | 
|  | gözardı ederek, önbellekteki içeriğin sunumu için gerekli | 
|  | yetkilendirmenin olup olmadığı konusunda bir karar üretmez. Başka bir | 
|  | deyişle, eğer <module>mod_cache</module> bir kısım içeriği önbelleğe | 
|  | almışsa içerik zaman aşımına uğramadığı sürece bu içerik önbellekten | 
|  | sunulacaktır.</p> | 
|  |  | 
|  | <p>Örneğin, yapılandırmanız bir özkaynağa IP adresine göre erişime izin | 
|  | veriyorsa bu içeriğin önbelleğe alınmayacağından emin olmalısınız. | 
|  | Bunu <directive module="mod_cache">CacheDisable</directive> | 
|  | yönergesini veya <module>mod_expires</module> kullanarak | 
|  | yapabilirsiniz. Bunu yapmaz, olayı kendi haline bırakırsanız | 
|  | <module>mod_cache</module> bir karşı vekil gibi çalışarak sunulan her | 
|  | içeriği arabelleğe alacak ve hangi IP adresinden gelirse gelsin her | 
|  | istemciye bunu sunacaktır.</p> | 
|  | </section> | 
|  |  | 
|  | <section> | 
|  | <title>Yerel İstismarcılar</title> | 
|  |  | 
|  | <p>Son kullanıcılarıın isteklerine önbellekten hizmet sunulduğundan | 
|  | önbelleğin kendisi içerikle etkileşime geçmek isteyenlerin veya | 
|  | içeriği tahrif etmek isteyenlerin hedefi haline gelebilir. Apache’yi | 
|  | çalıştıran kullanıcı tarafından her zaman önbelleğe yazılabileceğini | 
|  | akıldan çıkarmamak önemlidir. Bu durumda alışılmışın tersine tüm | 
|  | içeriğin Apache kullanıcısı tarafından yazılamamasının sağlanması | 
|  | önerilir.</p> | 
|  |  | 
|  | <p>Eğer Apache kullanıcısı, örneğin bir CGI sürecindeki açık nedeniyle | 
|  | tehlikeye atılırsa, önbellek hedef alınabilir. | 
|  | <module>mod_disk_cache</module> kullanılırken önbellekteki bir öğeyi | 
|  | değiştirmek veya önbelleğe yeni bir öğe eklemek görece daha | 
|  | kolaydır.</p> | 
|  |  | 
|  | <p>Bu risk, Apache kullanıcısını kullanan diğer saldırı türleriyle | 
|  | karşılaştırıldığında daha yüksektir. <module>mod_disk_cache</module> | 
|  | kullanıyorsanız şunları aklınızdan çıkarmayın: (1) Apache güvenlik | 
|  | güncellemelerini takip edin ve sunucunuzu buna göre güncelleyin. (2) | 
|  | Mümkünse <a href="suexec.html">suEXEC</a> kullanarak CGI süreçlerini | 
|  | Apache kullanıcısı olmayan bir kullanıcının aidiyetinde çalıştırın.</p> | 
|  |  | 
|  | </section> | 
|  |  | 
|  | <section> | 
|  | <title>Önbellek Zehirlenmeleri</title> | 
|  |  | 
|  | <p>Apache bir önbellekli vekil sunucu olarak çalıştığında önbellek | 
|  | zehirlenmesi adı verilen sorunla karşılaşılma olasılığı vardır. | 
|  | Önbellek zehirlenmesi, vekil sunucunun arka sunucudan yanlış (ve | 
|  | genellikle istenmeyen) içerik almasına sebep olan bir saldırı türünü | 
|  | betimlemek için yaygın olarak kullanılan bir terimdir.</p> | 
|  |  | 
|  | <p>Örneğin Apache’nin çalıştığı sistemin kullandığı DNS sunucuları DNS | 
|  | önbellek zehirlenmesinden etkilenebilecek durumdaysa, bir saldırgan | 
|  | Apache’nin istekleri almak için başvuracağı kaynak sunucunun yerini | 
|  | değiştirebilir. Diğer bir örnek, HTTP istek kaçakçılığı adı verilen | 
|  | bir saldırı türüdür.</p> | 
|  |  | 
|  | <p>Bu belge HTTP istek kaçakçılığını derinliğine incelenmesi için uygun | 
|  | yer değildir (böyle kaynaklara arama motorunuzla erişebilirsiniz). | 
|  | Bununla birlikte, vekil tarafından kaynak sunucudan alınan içeriği | 
|  | tamamen denetim altına almak amacıyla kaynak sunucudaki bir açığı | 
|  | istismar etmeye yönelik bir dizi istek yapılabileceğinin olasılık | 
|  | dahilinde olduğunu bilmenizde yarar vardır.</p> | 
|  | </section> | 
|  | </section> | 
|  |  | 
|  | <section id="filehandle"> | 
|  | <title>Dosya Tanıtıcı Önbelleklemesi</title> | 
|  |  | 
|  | <related> | 
|  | <modulelist> | 
|  | <module>mod_file_cache</module> | 
|  | </modulelist> | 
|  | <directivelist> | 
|  | <directive module="mod_file_cache">CacheFile</directive> | 
|  | <directive module="mod_cache">CacheEnable</directive> | 
|  | <directive module="mod_cache">CacheDisable</directive> | 
|  | </directivelist> | 
|  | </related> | 
|  |  | 
|  | <p>Bir dosyanın açılması işlemi, özellikle de ağ dosya sistemlerinde | 
|  | bulunan dosyalar için önemli bir gecikme kaynağı olabilir. Önbellekte, | 
|  | çok sunulan dosyaların kendilerinin değil, açık dosya tanıtıcılarının | 
|  | saklanması Apache’yi bu tür gecikmelerden koruyabilir. Apache’de tek türde | 
|  | dosya tanıtıcı önbelleklemesi yapılabilmektedir.</p> | 
|  |  | 
|  | <section> | 
|  | <title><code>CacheFile</code> yönergesi ile</title> | 
|  |  | 
|  | <p>Apache’de mevcut önbelleklemenin en temel şekli | 
|  | <module>mod_file_cache</module> tarafından sağlanan dosya tanıtıcı | 
|  | önbelleklemesidir. Bu önbellek türü dosyaların kendilerini değil açık | 
|  | dosya tanıtıcılarının bir listesini saklar. Dosyaların bu anlamda | 
|  | önbelleklenmesi, <directive module="mod_file_cache" | 
|  | >CacheFile</directive> yönergesi yapılandırma dosyasında belirtilerek | 
|  | sağlanabilir.</p> | 
|  |  | 
|  | <p><directive module="mod_file_cache">CacheFile</directive> yönergesi | 
|  | belirtilen dosyanın Apache başlatıldığında açılmasını ve dosya için | 
|  | yapılan sonraki her istekte bu dosya tanıtıcısının kullanılmasını | 
|  | sağlar.</p> | 
|  |  | 
|  | <example> | 
|  | CacheFile /usr/local/apache2/htdocs/index.html | 
|  | </example> | 
|  |  | 
|  | <p>Büyük miktarda dosyayı bu anlamda önbelleklemeyi tasarlıyorsanız | 
|  | işletim sisteminizin açık dosya tanıtıcılarının sayısı ile ilgili | 
|  | sınırlamasını uygun bir değere ayarlamanız gerekebilir.</p> | 
|  |  | 
|  | <p><directive module="mod_file_cache">CacheFile</directive> yönergesini | 
|  | kullandığınız takdirde dosya içeriğindeki değişiklikleri anında isteğe | 
|  | yansıtamazsınız. Apache dosyayı ilk başlatıldığındaki haliyle | 
|  | sunar.</p> | 
|  |  | 
|  | <p>Eğer Apache çalışırken dosya silinmişse Apache ilk başlatıldığındaki | 
|  | haline ilişkin dosya tanıtıcıyı sağlamaya ve dolayısıyla dosya | 
|  | içeriğini sunmaya devam edecektir. Yani, dosya silinmiş ve artık dosya | 
|  | sisteminde görünmüyor olsa bile Apache durdurulup dosya tanıtıcıları | 
|  | kapanmadıkça dosyaların silinmesiyle açılan yer serbest | 
|  | kalmayacaktır.</p> | 
|  | </section> | 
|  | </section> | 
|  |  | 
|  | <section id="inmemory"> | 
|  | <title>Sistem Belleğinde Önbellekleme</title> | 
|  |  | 
|  | <related> | 
|  | <modulelist> | 
|  | <module>mod_file_cache</module> | 
|  | </modulelist> | 
|  | <directivelist> | 
|  | <directive module="mod_cache">CacheEnable</directive> | 
|  | <directive module="mod_cache">CacheDisable</directive> | 
|  | <directive module="mod_file_cache">MMapStatic</directive> | 
|  | </directivelist> | 
|  | </related> | 
|  |  | 
|  | <p>İçeriğin sistem belleğinden sunulması içerik sunmanın evrensel olarak | 
|  | en hızlı yoludur. Dosyaların bir disk denetleyiciden okunması ya da daha | 
|  | kötüsü uzak bir ağdan okunması bellekten okumayla karşılaştırılamayacak | 
|  | ölçüde yavaş işlemlerdir. Disk denetleyiciler genellikle fiziksel | 
|  | süreçleri denetlerler. Ağ erişimi ise band genişliği sınırlamalarından | 
|  | etkilenir. Halbuki bellek erişimi sadece nano saniyeler mertebesinde | 
|  | gerçekleşir.</p> | 
|  |  | 
|  | <p>Sistem belleği en pahalı saklama ortamı olması sebebiyle en verimli | 
|  | şekilde kullanımı önemlidir. Dosyaları sistem belleğinde saklamakla | 
|  | sistemin kullanabileceği bellek miktarını azaltmış olursunuz. İşletim | 
|  | sistemi önbelleklemesinde göreceğiniz gibi bu öyle basit bir konu | 
|  | değildir. Apache’nin kendi kullandığı belleğin bir kısmını önbellek | 
|  | olarak ayırırken çok fazla bellek kullanmamak önemlidir. Aksi takdirde | 
|  | işletim sistemi belleğin yetmediği noktada belleği diske | 
|  | takaslayacağından istenen başarım artışı sağlanamayacaktır.</p> | 
|  |  | 
|  | <section> | 
|  | <title>İşletim Sistemi Önbelleklemesi</title> | 
|  |  | 
|  | <p>Günümüz iştetim sistemlerinin hemen hemen tamamında bellek içi | 
|  | dosya/veri saklama işlemlerini çekirdek yönetir. Bu güçlü bir | 
|  | özelliktir ve işletim sistemlerinin büyük çoğunluğu bunu böyle yapar. | 
|  | Örneğin, Linux’ta bir dosyanın ilk defa okunduğunda ve ikinci kez | 
|  | okunduğunda işlemcinin ne kadar meşgul edildiğine bakalım:</p> | 
|  |  | 
|  | <example> | 
|  | colm@coroebus:~$ time cat testfile > /dev/null<br /> | 
|  | real    0m0.065s<br /> | 
|  | user    0m0.000s<br /> | 
|  | sys     0m0.001s<br /> | 
|  | colm@coroebus:~$ time cat testfile > /dev/null<br /> | 
|  | real    0m0.003s<br /> | 
|  | user    0m0.003s<br /> | 
|  | sys     0m0.000s | 
|  | </example> | 
|  |  | 
|  | <p>Küçük bir dosya için bile okuma süresi bakımından büyük fark ortaya | 
|  | çıkmaktadır. Bunun sebebi çekirdeğin dosya içeriğini bellek daha | 
|  | güncel amaçlar için lazım olana dek bellek içinde saklamasıdır.</p> | 
|  |  | 
|  | <p>Sisteminizde yeterince yedek bellek olduğundan eminseniz, bu | 
|  | önbellekte daha fazla dosya saklanacağından emin olabilirsiniz. | 
|  | Bundan, önbelleğin sistem belleğinde verimli biçimde tutulması için | 
|  | Apache’de ek bir yapılandırmaya gidilmesinin gerekmediği sonucu | 
|  | çıkarılabilir.</p> | 
|  |  | 
|  | <p>Bundan başka, işletim sistemi dosyaların değiştiği ve silindiği | 
|  | zamanları bildiğinden bu tür dosyaların içerikleri gerektiğinde | 
|  | önbellekten kendiliğinden silinmiş olur. Bellek içinde dosya saklarken | 
|  | dosyaların değiştirilme zamanlarını bilme olanağı olmadığından bu | 
|  | durum Apache’ye büyük yarar sağlar.</p> | 
|  | </section> | 
|  |  | 
|  | <p>İşletim sisteminin dosyaların önbelleklenmesi için sağladığı bunca | 
|  | yarara ve başarım artışına karşın bellek içinde dosya önbelleklemenin | 
|  | Apache tarafından yerine getirilmesinin daha iyi olacağı bazı durumlar | 
|  | vardır.</p> | 
|  |  | 
|  | <section> | 
|  | <title><code>MMapStatic</code> yönergesi ile</title> | 
|  |  | 
|  | <p><module>mod_file_cache</module> modülü, bir durağan dosyanın | 
|  | içeriğini sunucunun başlatılması sırasında (mmap sistem çağrısıyla) | 
|  | belleğe eşlenmesini mümkün kılmak için <directive | 
|  | module="mod_file_cache" >MMapStatic</directive> yönergesini sağlar. | 
|  | Apache bu dosyaya gelecek sonraki istekler için dosyanın bellekiçi | 
|  | içeriğini kullanacaktır.</p> | 
|  |  | 
|  | <example> | 
|  | MMapStatic /usr/local/apache2/htdocs/index.html | 
|  | </example> | 
|  |  | 
|  | <p><directive module="mod_file_cache">CacheFile</directive> yönergesinde | 
|  | olduğu gibi bu dosyalarda Apache başlatıldıktan sonra yapılacak bir | 
|  | değişiklikten Apache’nin haberi olmayacaktır.</p> | 
|  |  | 
|  | <p><directive module="mod_file_cache">MMapStatic</directive> yönergesi | 
|  | ayırdığı belleğin toplam miktarı ile ilgilenmez, dolayısıyla | 
|  | yönergenin aşırı kullanımından kaçınmalısınız. Apache’nin çocuk | 
|  | süreçlerinin her biri bu belleğin kendilerine ait birer kopyasını | 
|  | yapacağından belleğe eşlenen dosyaların çok yer kaplamaması büyük önem | 
|  | taşımaktadır; aksi takdirde işletim sistemi belleği diske | 
|  | takaslayacağından beklenen fayda sağlanamayacaktır.</p> | 
|  | </section> | 
|  | </section> | 
|  |  | 
|  | <section id="disk"> | 
|  | <title>Disk Üzerinde Önbellekleme</title> | 
|  |  | 
|  | <related> | 
|  | <modulelist> | 
|  | <module>mod_disk_cache</module> | 
|  | </modulelist> | 
|  | <directivelist> | 
|  | <directive module="mod_cache">CacheEnable</directive> | 
|  | <directive module="mod_cache">CacheDisable</directive> | 
|  | </directivelist> | 
|  | </related> | 
|  |  | 
|  | <p><module>mod_disk_cache</module> modülü önbelleklemenin | 
|  | <module>mod_cache</module> için disk üzerinde yapılmasını mümkün | 
|  | kılar. Bbu önbellekleme akıllıca yapılır ve önbellekteki içerik | 
|  | sadece geçerli kabul edildiği sürece sunulabilir.</p> | 
|  |  | 
|  | <p>Modül bu amaçla genelde şöyle kullanılır:</p> | 
|  |  | 
|  | <example> | 
|  | CacheRoot   /var/cache/apache/<br /> | 
|  | CacheEnable disk /<br /> | 
|  | CacheDirLevels 2<br /> | 
|  | CacheDirLength 1 | 
|  | </example> | 
|  |  | 
|  | <p>En önemlisi önbelleklenen dosyaların yerel olarak saklanması olup | 
|  | işletim sisteminin sağladığı bellekiçi önbelleklemeden de ayrıca | 
|  | faydalanılmış olur. Bu bakımdan, dosyalar disk üzerinde saklansa bile | 
|  | sıkça erişilen dosyalar işletim sistemi sayesinde aslında bellekten | 
|  | sunulmuş olacaklardır.</p> | 
|  |  | 
|  | <section> | 
|  | <title>Önbellekte Saklamanın Anlamı</title> | 
|  |  | 
|  | <p><module>mod_disk_cache</module> öğeleri önbellekte saklamak için | 
|  | istek yapılan URL’nin 22 karakterlik özetini oluşturur. Bu özet, çok | 
|  | sayıda URL’nin aynı özeti oluşturmaması için konak ismi, protokol, | 
|  | port ve varsa CGI argümanlarından oluşur.</p> | 
|  |  | 
|  | <p>Özeti oluşturan karakterler 64 karakterlik bir karakter kümesinden | 
|  | seçildiğinden oluşturulması olası farklı özet sayısı 64^22’dir. | 
|  | Örneğin, bir URL’nin <code>xyTGxSMO2b68mBCykqkp1w</code> gibi bir | 
|  | özeti olabilir. Bu özet, bu URL ile erişilen dosyalar önbellek içinde | 
|  | saklanırken dosya ismi öneki olarak kullanılır. Ancak bununla | 
|  | yetinilmez ve içerik <directive | 
|  | module="mod_disk_cache">CacheDirLevels</directive> ve <directive | 
|  | module="mod_disk_cache">CacheDirLength</directive> yönergelerinin | 
|  | değerlerine göre önce dizinlere ayrılır.</p> | 
|  |  | 
|  | <p><directive module="mod_disk_cache">CacheDirLevels</directive> | 
|  | yönergesi kaç alt seviye dizin olacağını belirler. Örneğin, yukarıdaki | 
|  | özete sahip bir dosyanın isminin başına yukarıdaki yapılandırma | 
|  | örneğine uygun olarak | 
|  | <code>/var/cache/apache/x/y/TGxSMO2b68mBCykqkp1w</code> gibi bir önek | 
|  | getirilebilirdi.</p> | 
|  |  | 
|  | <p>Bu tekniğin asıl amacı belli bir dizin içinde bulunabilecek | 
|  | dosyaların ve alt dizinlerin sayısını düşük tutmaktır. Bu sayının | 
|  | büyük olması çoğu işletim sisteminde başarımın düşmesine sebep olur. | 
|  | <directive module="mod_disk_cache">CacheDirLength</directive> | 
|  | yönergesi "1" değeriyle kullanıldığında her dizin altında en fazla 64 | 
|  | alt dizin veya dosya açılabilir. "2" değeriyle kullanıldığında ise bu | 
|  | sayı 64^2’ye yükselir ve böyle artarak gider. İyi bir sebebiniz | 
|  | olmadıkça <directive | 
|  | module="mod_disk_cache">CacheDirLength</directive> için değer olarak | 
|  | "1" belirtmenizi öneririz.</p> | 
|  |  | 
|  | <p><directive module="mod_disk_cache">CacheDirLevels</directive> | 
|  | yönergesine atanacak değer önbellekte saklamayı düşündüğünüz olası | 
|  | dosya sayısı ile ilgilidir. Yukarıdaki örnekte olduğu gibi "2" | 
|  | değerini belirtirseniz, toplamda en fazla 4096 dizin oluşturulabilir. | 
|  | 1 milyon dosyanın önbelleklendiği bir durumda bu, her dizinde yaklaşık | 
|  | olarak 245 önbelleklenmiş URL demektir.</p> | 
|  |  | 
|  | <p>Her URL için önbellekte en az iki dosya saklanır. Biri genellikle URL | 
|  | hakkındaki temel verilerden oluşan ".header" dosyasıdır, diğeri ise | 
|  | sunulacak içeriğin bire bir kopyası olan ".data" dosyasıdır.</p> | 
|  |  | 
|  | <p>"Vary" başlığı üzerinden içeriğin uzlaşıldığı durumda URL için bir | 
|  | ".vary" dizini oluşturulur. Bu dizin her biri farklı bir uzlaşıma ait | 
|  | çok sayıda ".data" dosyası içerebilir.</p> | 
|  | </section> | 
|  |  | 
|  | <section> | 
|  | <title>Disk Önbelleğinin Bakımı</title> | 
|  |  | 
|  | <p><module>mod_disk_cache</module> zaman aşımına uğrayan önbellekli | 
|  | içeriği silse de önbelleğin toplam boyu ve ne kadar boş bellek kaldığı | 
|  | hakkında bilgi vermez.</p> | 
|  |  | 
|  | <p>Bunun yerine Apache önbellek içeriğini düzenli aralıklarla | 
|  | temizleyebilmeniz için <program>htcacheclean</program> adında bir araç | 
|  | içerir.  Önbellek için azami ne kadar yer kullanılacağının ve bunun | 
|  | üzerinde <program>htcacheclean</program>’i hangi sıklıkta | 
|  | çalıştırılacağının tespiti biraz karmaşık bir işlem olup uygun değerler | 
|  | genellikle deneme yanılma yoluyla bulunur.</p> | 
|  |  | 
|  | <p><program>htcacheclean</program> iki işlem kipine sahiptir. Kalıcı bir | 
|  | artalan süreci olarak çalışabileceği gibi cron üzerinden belli | 
|  | aralıklarla da çalıştırılabilir. Çok büyük (onlarca GB) önbelleklerde | 
|  | <program>htcacheclean</program>’in işini bitirmesi 1 saatten fazla | 
|  | sürebileceğinden, cron ile çalıştırma durumunda aynı anda birden fazla | 
|  | kopyanın çalışıyor durumda olmaması için | 
|  | <program>htcacheclean</program>’in çalıştırılma aralığını iyi | 
|  | belirlemek gerekir.</p> | 
|  |  | 
|  | <p class="figure"> | 
|  | <img src="images/caching_fig1.tr.png" alt="" width="600" | 
|  | height="406" /><br /> | 
|  | <a id="figure1" name="figure1"><dfn>Şekil 1</dfn></a>: | 
|  | Önbelleğin büyümesi ve düzenli aralıklarla temizlenmesi.</p> | 
|  |  | 
|  | <p><module>mod_disk_cache</module> ne kadar önbellek alanı kullandığı | 
|  | ile ilgili bir bilgi vermediğinden <program>htcacheclean</program>’in | 
|  | bir temizlik sonrası yeterince büyük bir genişleme alanı kalacak | 
|  | şekilde yapılandırılması önemlidir.</p> | 
|  | </section> | 
|  |  | 
|  | </section> | 
|  |  | 
|  | </manualpage> |