| <?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: 1291840:1836060 (outdated) --> |
| <!-- ===================================================== |
| 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_cache_disk</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 HTTPD sunucusunun önbellekleme |
| özelliklerinin nasıl kullanılacağı açıklanmıştır.</p> |
| </summary> |
| |
| <section id="introduction"> |
| <title>Giriş</title> |
| |
| <p>Apache HTTP sunucusu, sunucunun başarımını çeşitli yollarla arttırmak |
| üzere tasarlanmış bir dizi önbellekleme özelliğine sahiptir.</p> |
| |
| <dl> |
| <dt>Üç durumlu RFC2616 HTTP önbelleklemesi</dt> |
| <dd> |
| <module>mod_cache</module> ve destek modülü |
| <module>mod_cache_disk</module> akılcı ve HTTP'ye uygun |
| önbellekleme sağlar. İçeriğin kendisi önbellekte saklanır ve |
| <module>mod_cache</module>, <a |
| href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html" |
| >RFC2616'nın 13. bölümü</a>nde açıklandığı gibi, içeriğin |
| önbelleklenebilirliğini denetleyen çeşitli HTTP başlıklarının ve |
| seçeneklerinin tümünü onurlandırmayı hedefler. |
| Devingen yerel içerik veya vekalet edilen içerik ile ilgilendiğiniz |
| durumda veya muhtemel bir yavaş disk üzerinde yerel dosyalara |
| erişimi hızlandırmak ihtiyacında olduğunuz durumda |
| <module>mod_cache</module> hem basit hem de karmaşık önbellekleme |
| yapılandırmalarını hedefler. |
| </dd> |
| <dt>İki durumlu anahtar/değer paylaşımlı nesne önbellekleme</dt> |
| <dd> |
| <a href="socache.html">Paylaşımlı nesne önbellek API'si</a> |
| (socache) ve destek modülleri sunucu taraflı bir anahtar/değer |
| paylaşımlı nesne önbelleklemesi sağlar. Bu modüller SSL oturumları |
| ve kimlik doğrulama bilgileri gibi düşük seviyeli verileri |
| önbelleklemek için tasarlanmıştır. Destek modülleri verinin sunucu |
| tarafı bir paylaşımlı bellekte veya veri merkezi tarafı memcache |
| veya distcache gibi bir önbellekte saklanmasını mümkün kılar. |
| </dd> |
| <dt>Uzmanlaşmış dosya önbellekleme</dt> |
| <dd> |
| <module>mod_file_cache</module> dosyaların sunucunun başlatılması |
| sırasında belleğe yüklenmesi ile ilgilenir. Böylece dosyalara |
| erişim zamanını kısaltabilir, sıkça erişilen dosyaların dosya |
| tanıtıcılarını kaydedebilir, her istekte diske gitme ihtiyacını |
| ortadan kaldırır. |
| </dd> |
| </dl> |
| |
| <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="http-caching"> |
| |
| <title>Üç durumlu RFC2616 HTTP önbelleklemesi</title> |
| |
| <related> |
| <modulelist> |
| <module>mod_cache</module> |
| <module>mod_cache_disk</module> |
| </modulelist> |
| <directivelist> |
| <directive module="mod_cache">CacheEnable</directive> |
| <directive module="mod_cache">CacheDisable</directive> |
| <directive module="core">UseCanonicalName</directive> |
| <directive module="mod_negotiation">CacheNegotiatedDocs</directive> |
| </directivelist> |
| </related> |
| |
| <p>HTTP protokolü |
| <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html" |
| >RFC2616'nın 13. bölümü</a>nde açıklanan satıriçi önbellekleme |
| mekanizması için yerleşik bir destek içerir ve bunun getirilerinden |
| yararlanmak için <module>mod_cache</module> modülü kullanılabilir.</p> |
| |
| <p>İçeriğin taze olmadığı durumda içeriğin kaybolmasına sebep olan basit |
| iki durumlu anahtar/değer önbelleklemesinin tersine, HTTP önbelleği |
| eskimiş içeriği tutan ve bu eski içeriğin değişip değişmediğini özgün |
| sunucuya soran ve duruma göre onu tekrar taze duruma getiren bir |
| mekanizma içerir.</p> |
| |
| <p>HTTP önbelleğinde bulunan bir girdi şu üç durumdan birinde olabilir:</p> |
| |
| <dl> |
| <dt>Taze</dt> |
| <dd> |
| İçerik yeteri kadar yeni (<strong>tazelik ömrü</strong>nden daha genç) |
| ise <strong>taze</strong> sayılır. Bir HTTP önbelleği böyle bir içeriği |
| özgün sunucuya birşey sormadan sunabilir. |
| </dd> |
| <dt>Bayat</dt> |
| <dd> |
| <p>İçerik çok eski (<strong>tazelik ömrü</strong>nden daha yaşlı) |
| ise <strong>bayat</strong> sayılır. Bir HTTP önbelleği böyle bir |
| içeriği istemciye sunmadan önce özgün sunucuya bağlanıp bayat içeriğin |
| hala yeterince taze olup olmadığına bakmalıdır. Özgün sunucu, içerik |
| geçersizse yenisini gönderecektir, aksi takdirde, (ideal olanı budur) |
| içeriğin hala geçerli olduğunu belirten bir kod ile yanıt verecektir. |
| İçerik tekrar taze hale gelince süreç kaldığı yerden devam eder.</p> |
| |
| <p>HTTP protokolü belli koşullar altında önbelleğin bayat içeriği |
| sunmasına izin vermez. Örneğin, bir içeriği özgün sunucuda tazeleme |
| çabasının bir 5xx hatasıyla başarısız olması veya başka bir tazeleme |
| isteğinin henüz sonuçlanmamış olması bu çeşit koşullardandır. Bu |
| durumlarda yanıta bir <code>Warning</code> başlığı eklenir.</p> |
| </dd> |
| <dt>Yok</dt> |
| <dd> |
| Önbellekte yer kalmazsa yer açmak için içeriğin silinmesi seçenek |
| dahilindedir. İçerik taze olsun olmasın her zaman silinebilir. Önlem |
| olarak <program>htcacheclean</program> elle veya bir artalan süreci |
| olarak çalıştırılabilir. Böylece önbelleğin boyutunun belirtilen |
| boyutta veya belirtilen dosya düğümü sayısında kalması sağlanabilir. |
| Araç içeriği silerken bayat içeriğe öncelik verir. |
| </dd> |
| </dl> |
| |
| <p>HTTP önbelleklemesinin çalışması ile ilgili bütün ayrıntılar |
| <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html" |
| >RFC2616'nın 13. bölümünde</a> bulunabilir.</p> |
| |
| <section> |
| <title>Sunucu ile etkileşim</title> |
| |
| <p><module>mod_cache</module> modülü |
| <directive module="mod_cache">CacheQuickHandler</directive> yönergesinin |
| değerine bağlı olarak iki olası yerde sunucuya bağlanır: |
| </p> |
| |
| <dl> |
| <dt>Çabuk eylem aşaması</dt> |
| <dd> |
| <p>Bu aşama çok erken gerçekleşen bir aşama olup isteğin işlenmesi |
| sırasında isteğin çözümlenmesinin hemen sonrasıdır. İçerik |
| önbellekte mevcutsa hemen sunulur ve geri kalan istek işleme işlemi |
| iptal edilir.</p> |
| |
| <p>Bu senaryoda önbellek sunucunun önüne vidalanmış gibi |
| davranır.</p> |
| |
| <p>Sunucuda gerçekleşecek bir dizi işlemin büyük çoğunluğunun |
| yapılmadan geçilmesi nedeniyle bu en yüksek başarımlı kiptir. |
| Bu kip ayrıca, sunucu işlemlerinin kimlik doğrulama ve yetkilendirme |
| aşamalarının da yapılmadan geçilmesini sağlar. Bu bakımdan bu kip |
| seçilirken bu durum dikkate alınmalıdır.</p> |
| </dd> |
| <dt>Normal eylem aşaması</dt> |
| <dd> |
| <p>Bu aşama geç bir aşama olup, isteğin tamamen işlenmesinin |
| sonrasıdır.</p> |
| |
| <p>Bu senaryoda önbellek sunucunun arkasına vidalanmış gibi |
| davranır.</p> |
| |
| <p>Bu kip en esneğidir. Önbelleğin, süzme zincirinin hassas olarak |
| denetlenen bir noktasında oluşması sağlanabilir ve önbelleklenen |
| içerik istemciye gönderilmeden önce süzülüp |
| kişiselleştirilebilir.</p> |
| </dd> |
| </dl> |
| |
| <p>URL önbellekte yoksa <module>mod_cache</module> modülü yanıtı |
| önbelleğe kaydetme aşamasında süzgeç yığıtına bir |
| <a href="filter.html">süzgeç</a> ekler ve geri çekilerek normal istek |
| işlemlerinin devam etmesine izin verir. İçeriğin önbelleklenebilir |
| olduğu saptanırsa içerik gelecekte sunulmak üzere önbelleğe |
| kaydedilir, aksi takdirde içerik yok sayılır.</p> |
| |
| <p>Önbellekteki içerik bayatsa, <module>mod_cache</module> modülü |
| isteği bir <strong>koşullu istek</strong> haline getirir. Özgün |
| sunucu normal bir yanıt verirse bu yanıt mevcut içeriğin yerine |
| önbelleklenir. Özgün sunucu bir <code>304 Not Modified</code> yanıtı |
| verirse içerik tekrar taze olarak imlenir ve önbellekteki içerik |
| süzgeç tarafından kaydedilmeden sunulur.</p> |
| </section> |
| |
| <section> |
| <title>Önbelleğin Hızlandırılması</title> |
| |
| <p>Bir sanal konak birçok farklı sunucu takma adından biri olarak |
| bilindiğ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ış |
| olduğu görülür. Bunun sebebi içeriği sunan sanal konağın isminin |
| önbellek anahtarının içinde 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> |
| </section> |
| |
| <section> |
| <title>Tazelik Ömrü</title> |
| |
| <p>Önbelleklenmek üzere tasarlanmış iyi biçimli bir içerik tazelik ömrünü |
| <code>Cache-Control</code> başlığının <code>max-age</code> veya |
| <code>s-maxage</code> alanlarıyla ya da bir <code>Expires</code> |
| başlığını içererek bildirmelidir.</p> |
| |
| <p>Aynı zamanda, özgün sunucunun tanımladığı tazelik ömrü, bir istemci |
| tarafından istekte bir <code>Cache-Control</code> başlığı kullanılarak |
| geçersiz kılınmak istenebilir. Bu durumda hangi tazelik ömrü daha |
| kısaysa o geçerli olur.</p> |
| |
| <p>Tazelik ömrü istekte veya yanıtta mevcut değilse öntanımlı bir tazelik |
| ömrü kullanılır. Öntanımlı tazelik ömrü önbellekli içerik için bir saat |
| olmakla birlikte <directive |
| module="mod_cache">CacheDefaultExpire</directive> yönergesi |
| kullanılarak kolayca değiştirilebilir.</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> tazelik ömrünü <directive |
| module="mod_cache">CacheLastModifiedFactor</directive> yönergesine |
| bakarak saptar.</p> |
| |
| <p>Yerel içerik için, ya da kendi <code>Expires</code> başlığını |
| tanımlamayan uzak içerik için tazelik ömrünü <code>max-age</code> ve |
| <code>Expires</code> ekleyerek hassas olarak ayarlamak |
| için <module>mod_expires</module> kullanılabilir.</p> |
| |
| <p>Tazelik ömrünün ü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çeriğin zaman aşımına uğrayıp bayat hale gelmesi, |
| httpd’nin özgün isteği aktarmak yerine isteği değişikliğe uğratarak |
| şartlı bir istek yapması sonucunu doğurur.</p> |
| |
| <p>Özgün önbellekli yanıtta bir <code>ETag</code> başlığı mevcutsa, |
| <module>mod_cache</module> modülü özgün sunucuya yapılan isteğe |
| bir <code>If-None-Match</code> başlığı ekler. |
| Özgün önbellekli yanıtta bir <code>Last-Modified</code> başlığı |
| mevcutsa, <module>mod_cache</module> modülü özgün sunucuya yapılan |
| isteğe bir <code>If-Modified-Since</code> başlığı ekler. Bunlardan |
| birinin varlığı isteği <strong>koşullu</strong> yapar.</p> |
| |
| <p>Bir koşullu istek özgün sunucu tarafından alındığında, özgün sunucu |
| <code>ETag</code> veya <code>Last-Modified</code> başlığının isteğe |
| uygun olarak değişip değişmediğine bakmalıdır. Değişmemişse, özgün |
| sunucu kısa ve öz bir "304 Not Modified" yanıtı ile yanıt vermelidir. |
| Bunun önbellekteki anlamı şudur: Eskimiş içerik hala tazedir ve içerik |
| yeni tazelik ömrüne ulaşıncaya kadar sonraki isteklerde |
| kullanılmalıdır.</p> |
| |
| <p>İçerik değişmişse, bir şartlı istek yapılmamış gibi içeriğin kendisi |
| sunulur.</p> |
| |
| <p>Şartlı istekler çifte yarar sağlar. Birinci olarak, böyle bir istek |
| özgün 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, iyi tasarlanmış bir özgün sunucu, koşullu istekler tam |
| bir yanıt üretmekten önemli ölçüde ucuz olacak şekilde tasarlanmış |
| olacaktır. 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, yerel içeriği bir değişiklik olmadığı takdirde önbellekten |
| sunmak daha hızlı olacaktır.</p> |
| |
| <p>Özgün sunucular koşullu istekleri desteklemek için her türlü çabayı |
| göstermelidir. Ancak, koşullu istekler desteklenmiyorsa, özgün sunucu |
| istek koşullu değilmiş gibi yanıt vermeli, önbellek ise, içerik |
| değişmiş ve yani içerik önbelleğe kaydedilmiş gibi yanıt vermelidir. Bu |
| durumda, önbellek basit bir iki durumlu (içerik ya tazedir ya da |
| silinmiş) önbellek gibi davranacaktır.</p> |
| </section> |
| |
| <section> |
| <title>Neler Önbelleklenebilir?</title> |
| |
| <p>HTTP önbelleğin tarafından önbelleklenebilecek içerik |
| <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.4"> |
| RFC2616 Section 13.4 Response Cacheability</a> belgesinde tanımlanmış |
| olup, bunlar şöyle özetlenebilir:</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>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, aksi takdirde |
| önbelleklenmez.</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 veya |
| "Cache-Control:" başlığının max-age veya max-age yönergesini |
| 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 birini veya "Cache-Control:" başlığının "max-age" veya |
| "s-maxage" yönergelerinden birini (en azından) 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>İçerik zamana bağımlıysa ya da istek kısmen bile olsa HTTP uzlaşımıyla |
| bağdaşmıyorsa önbelleğe alınmamalıdır. Bu içerik önbelleklenemeyeceğini |
| <code>Cache-Control</code> başlığını kullanarak sunucuya |
| bildirmelidir.</p> |
| |
| <p>İçerik sıkça değişiyorsa, tazelik ömrü dakikalar veya saniyelerle |
| ifade ediliyorsa, içerik yine de önbelleklenebilir. Ancak, tam |
| yanıtların düzenli olarak üretilmemesinin temini için özgün sunucunun |
| <strong>koşullu istekleri</strong> doğru olarak desteklemesi |
| sağlanmalıdır.</p> |
| |
| <p>İstemcinin sağladığı istek başlıklarına dayanarak değişen içerik, |
| <code>Vary</code> yanıt başlığının akıllıca kullanımıyla |
| önbelleklenebilir.</p> |
| </section> |
| |
| <section> |
| <title>Değişken/Uzlaşımlı İçerik</title> |
| |
| <p>Özgün sunucu, istekteki başlık değerlerine dayanarak farklı |
| içeriklerle yanıt vermeye ayarlandığı takdirde, örneğin aynı URL'de |
| farklı dillerde içerik sunmak gibi, HTTP'nin önbellekleme mekanizması |
| aynı URL'de aynı sayfanın değişik sürümlerini önbelleklemeyi mümkün |
| kılar.</p> |
| |
| <p>Bu özgün sunucu tarafından bir <code>Vary</code> başlığı eklenerek |
| yapılır. Bir sayfanın farklı sürümleri arasındaki farkları saptarken |
| önbellek tarafından hangi başlıkların hesaba katılacağını |
| <code>Vary</code> başlığı belirler.</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> |
| |
| <p>İçeriğin farklı sürümleri yan yana önbelleklenebilir. |
| <module>mod_cache</module> modülü <code>Vary</code> başlığını |
| kullanarak başlıkta listelenmiş istek başlıklarının uygun değerlerini |
| saptar ve istemciye hangi sürümle yanıt verileceğine karar verir.</p> |
| </section> |
| |
| <section id="disk"> |
| <title>Disk Üzerinde Önbellekleme</title> |
| |
| <p><module>mod_cache</module> modülü önbelleği yönetmek için çeşitli |
| depolama ortamlarına özgü gerçeklenimleri kullanır. Diske önbellekleme |
| desteğini <module>mod_cache_disk</module> sağlar.</p> |
| |
| <p>Tipik olarak modül şöyle yapılandırı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> |
| |
| <section> |
| <title>Önbellekte Saklamanın Anlamı</title> |
| |
| <p><module>mod_cache_disk</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 başka <code>Vary</code> başlığında |
| tanımlı elemanlardan 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_cache_disk">CacheDirLevels</directive> ve <directive |
| module="mod_cache_disk">CacheDirLength</directive> yönergelerinin |
| değerlerine göre önce dizinlere ayrılır.</p> |
| |
| <p><directive module="mod_cache_disk">CacheDirLevels</directive> |
| yönergesi kaç alt seviye dizin olacağını ve <directive |
| module="mod_cache_disk">CacheDirLength</directive> her dizinde kaç |
| karakter 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_cache_disk">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_cache_disk">CacheDirLength</directive> için değer olarak |
| "1" belirtmenizi öneririz.</p> |
| |
| <p><directive module="mod_cache_disk">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_cache_disk</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 httpd ö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>Ayrıca, <program>htcacheclean</program> için uygun bir "nice" seviyesi |
| seçilmesi önerilr. Böylece, sunucu çalışırken aracın ölçüsüz disk g/ç |
| yapmasına sebebiyet verilmemiş olur.</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_cache_disk</module> ne kadar bellek kullanıldığı hakkında |
| bilgi vermediğinden, <program>htcacheclean</program>'in bir temizliğin |
| ardından yeterli bir büyüme alanı kalacak şekilde yapılandırılması |
| temin edilmelidir.</p> |
| </section> |
| |
| </section> |
| |
| <section id="socache-caching"> |
| <title>İki durumlu Anahtar/Değer Paylaşımlı Nesne Önbellekleme</title> |
| |
| <related> |
| <modulelist> |
| <module>mod_authn_socache</module> |
| <module>mod_socache_dbm</module> |
| <module>mod_socache_dc</module> |
| <module>mod_socache_memcache</module> |
| <module>mod_socache_shmcb</module> |
| <module>mod_ssl</module> |
| </modulelist> |
| <directivelist> |
| <directive module="mod_authn_socache">AuthnCacheSOCache</directive> |
| <directive module="mod_ssl">SSLSessionCache</directive> |
| <directive module="mod_ssl">SSLStaplingCache</directive> |
| </directivelist> |
| </related> |
| |
| <p>Apache HTTP sunucusu, SSL oturumları, kimlik doğrulama bilgileri gibi |
| önbelleklenebilen özel bilgiler için <a href="socache.html">socache</a> |
| arayüzü içinde düşük seviyeli bir paylaşımlı nesne önbelleğine |
| sahiptir.</p> |
| |
| <p>Her gerçeklenime uygun ek modüller de sağlanmıştır:</p> |
| |
| <dl> |
| <dt><module>mod_socache_dbm</module></dt> |
| <dd>DBM tabanlı paylaşımlı nesne önbelleklemesi.</dd> |
| <dt><module>mod_socache_dc</module></dt> |
| <dd>Distcache tabanlı paylaşımlı nesne önbelleklemesi.</dd> |
| <dt><module>mod_socache_memcache</module></dt> |
| <dd>Memcache tabanlı paylaşımlı nesne önbelleklemesi.</dd> |
| <dt><module>mod_socache_shmcb</module></dt> |
| <dd>Paylaşımlı belleğe dayalı paylaşımlı nesne önbelleklemesi.</dd> |
| </dl> |
| |
| <section id="mod_authn_socache-caching"> |
| <title>Kimlik Doğrulama Bilgilerinin Önbelleklenmesi</title> |
| |
| <related> |
| <modulelist> |
| <module>mod_authn_socache</module> |
| </modulelist> |
| <directivelist> |
| <directive module="mod_authn_socache">AuthnCacheSOCache</directive> |
| </directivelist> |
| </related> |
| |
| <p><module>mod_authn_socache</module> modülü kimlik doğrulama araçlarının |
| yükünün hafifletilmesini, kimlik doğrulama sonucunun önbelleklenmesini |
| sağlar.</p> |
| </section> |
| |
| <section id="mod_ssl-caching"> |
| <title>SSL Oturumlarının Önbelleklenmesi</title> |
| |
| <related> |
| <modulelist> |
| <module>mod_ssl</module> |
| </modulelist> |
| <directivelist> |
| <directive module="mod_ssl">SSLSessionCache</directive> |
| <directive module="mod_ssl">SSLStaplingCache</directive> |
| </directivelist> |
| </related> |
| |
| <p><module>mod_ssl</module> modülü, oturum önbelleği ve önbellek |
| zımbalaması sağlamak için <code>socache</code> arayüzünü kullanır.</p> |
| </section> |
| </section> |
| |
| <section id="file-caching"> |
| <title>Uzmanlaşmış Dosya Önbellekleme</title> |
| |
| <related> |
| <modulelist> |
| <module>mod_file_cache</module> |
| </modulelist> |
| <directivelist> |
| <directive module="mod_file_cache">CacheFile</directive> |
| <directive module="mod_file_cache">MMapFile</directive> |
| </directivelist> |
| </related> |
| |
| <p>Dosya sisteminin yavaş olabildiği veya dosya tanıtıcılarının |
| kullanımının pahalıya mal olduğu sistemlerde, sunucunun başlatılması |
| sırasında dosyaların belleğe yüklenmesi seçeneği vardır.</p> |
| |
| <p>Dosyaların açılmasının yavaş olduğu sistemlerde, dosyaların sunucunun |
| başlatılması sırasında açılması ve dosya tanıtıcısını önbelleklenmesi |
| seçeneği vardır. Bu seçeneklerin duruk dosyalara erişimin yavaş olduğu |
| sistemlere de bir yardımı olabilir.</p> |
| |
| <section id="filehandle"> |
| <title>Dosya Tanıtıcı Önbelleklemesi</title> |
| |
| <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ı httpd’yi bu tür gecikmelerden koruyabilir. httpd’de tek |
| türde dosya tanıtıcı önbelleklemesi yapılabilmektedir.</p> |
| |
| <section> |
| <title><code>CacheFile</code> yönergesi ile</title> |
| |
| <p>httpd’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 httpd 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. httpd dosyayı ilk başlatıldığındaki haliyle |
| sunar.</p> |
| |
| <p>Eğer httpd çalışırken dosya silinmişse httpd 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 httpd 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> |
| |
| <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. httpd’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 |
| httpd’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 httpd’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 |
| httpd tarafından yerine getirilmesinin daha iyi olacağı bazı durumlar |
| vardır.</p> |
| |
| <section> |
| <title><code>MMapFile</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" >MMapFile</directive> yönergesini sağlar. |
| httpd bu dosyaya gelecek sonraki istekler için dosyanın bellekiçi |
| içeriğini kullanacaktır.</p> |
| |
| <example> |
| MMapFile /usr/local/apache2/htdocs/index.html |
| </example> |
| |
| <p><directive module="mod_file_cache">CacheFile</directive> |
| yönergesinde olduğu gibi bu dosyalarda httpd başlatıldıktan sonra |
| yapılacak bir değişiklikten httpd’nin haberi olmayacaktır.</p> |
| |
| <p><directive module="mod_file_cache">MMapFile</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. httpd’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> |
| |
| <section id="security"> |
| <title>Güvenlik Kaygıları</title> |
| |
| <section> |
| <title>Erişim Denetimi ve Yetkilendirme</title> |
| |
| <p><directive module="mod_cache">CacheQuickHandler</directive> |
| yönergesine <code>On</code> değerinin atandığı öntanımlı durumda |
| <module>mod_cache</module> kullanımı, daha çok sunucunun önüne |
| vidalanmış önbelleklemeli bir karşı vekile sahip olmak gibidir. Özgün |
| sunucunun bir harici önbellekmiş gibi sorgulanmasını gerektirmeyen tüm |
| istekler önbellekleme modülü tarafından karşılanacaktır. Bu durum |
| httpd'nin güvenlik modelini büyük ölçüde değiştirir.</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> modülünü 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 önbelleğe alacak ve hangi IP adresinden gelirse gelsin her |
| istemciye bunu sunacaktır.</p> |
| |
| <p><directive module="mod_cache">CacheQuickHandler</directive> |
| yönergesine <code>Off</code> atandığı takdirde, istek işleme |
| aşamalarının tamamı yerine getirilir ve güvenlik modeli değişmeden |
| kalı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. httpd’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_cache_disk</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_cache_disk</module> |
| kullanıyorsanız şunları aklınızdan çıkarmayın: (1) httpd 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>httpd bir önbellekli vekil sunucu olarak çalıştığında önbellek |
| zehirlenmesi adı verilen sorunla karşılaşılma olasılığı vardır. |
| Önbellek zehirlenmesi, vekil sunucunun özgün 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 httpd’nin çalıştığı sistemin kullandığı DNS sunucuları DNS |
| önbellek zehirlenmesinden etkilenebilecek durumdaysa, bir saldırgan |
| httpd’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> |
| <title>Hizmet Reddi / Önbelleğin Engellenmesi</title> |
| |
| <p>Vary mekanizması aynı URL'nin çok sayıda sürümünün yan yana |
| önbelleklenmesini mümkün kılar. İstemci tarafından sağlanan başlık |
| değerlerine bağlı olarak, önbellek istemciye gönderilecek doğru yanıtı |
| bulacaktır. Normal kullanımda olası değerlerin çok geniş olduğunun |
| bilindiği durumda bir başlığı (örn, <code>User-Agent</code>) |
| değişikliğe uğratma çabası bu mekanizmayı bir sorun haline getirebilir. |
| Sitenin tanınırlığına bağlı olarak aynı URL'nin binlerce hatta |
| milyonlarca önbellek girdisi oluşabilir ve bunlar önbellekteki diğer |
| girdilerin yerini alabilir.</p> |
| |
| <p>Diğer yandan, belli bir özkaynağın URL'sinin her istekte |
| değiştirilmesi ihtiyacı ortaya çıkabilir. Bu normalde URL dizgesine bir |
| "cachebuster" dizgesi eklenerek yapılır. Bu içerik sunucu tarafından |
| anlamlı bir tazelik ömrüyle önbelleklenebilir olarak imlenmişse bu |
| girdiler kısa zamanda önbellekteki meşru girdilerin yerini alabilir. |
| <module>mod_cache</module> modülü bunun önlenmesi için <directive |
| module="mod_cache">CacheIgnoreURLSessionIdentifiers</directive> |
| yönergesine sahipse de bu yönerge, yoldaki vekillerin veya tarayıcı |
| önbelleklerinin aynı hizmet reddi saldırısına maruz kalmamaları için |
| dikkatle kullanılmalıdır.</p> |
| </section> |
| </section> |
| |
| </manualpage> |