Apache İçerik Önbellekleme Yapılandırması (Ubuntu 14.04)
Web sitelerinin performansı, kullanıcı deneyimi ve arama motoru sıralaması için kritik bir faktördür. Yüksek trafikli sitelerde veya dinamik içerik sunan uygulamalarda, her isteği sıfırdan işlemek sunucu kaynaklarını tüketir ve yanıt sürelerini uzatır. Bu sorunu çözmek için en etkili yöntemlerden biri içerik önbelleklemedir. Apache HTTP Sunucusu, modüler yapısı sayesinde güçlü ve esnek önbellekleme yetenekleri sunar. Bu makalede, Ubuntu 14.04 işletim sistemi üzerinde Apache içerik önbelleklemesinin nasıl yapılandırılacağını, farklı önbellekleme modüllerini, yapılandırma direktiflerini ve en iyi uygulamaları detaylı bir şekilde inceleyeceğiz.
1. Giriş: Önbellekleme Neden Önemli?
Önbellekleme (Caching), sıkça erişilen verilerin veya içeriklerin daha hızlı erişilebilir bir konumda (önbellekte) depolanması işlemidir. Bir kullanıcı bir web sayfasını ziyaret ettiğinde, sunucu genellikle veritabanından veri çeker, dinamik içerik oluşturur ve bu içeriği istemciye gönderir. Önbellekleme devreye girdiğinde, bu işlemden geçen nihai içerik veya ara sonuçlar belirli bir süre için depolanır. Sonraki aynı istekler geldiğinde, sunucu içeriği sıfırdan oluşturmak yerine önbellekten hızlıca sunar.
Bu yaklaşımın temel faydaları şunlardır:
- Performans Artışı: Sayfa yükleme süreleri kısalır, kullanıcı deneyimi iyileşir.
- Sunucu Yükünün Azalması: CPU, bellek ve disk I/O gibi sunucu kaynakları üzerindeki baskı azalır. Bu, aynı donanım üzerinde daha fazla trafiği yönetebilme anlamına gelir.
- Bant Genişliği Tasarrufu: Özellikle ters proxy önbelleklemesi durumunda, sunucunun internete çıkan bant genişliği kullanımı azalabilir.
- Daha İyi Kullanıcı Deneyimi: Hızlı yüklenen sayfalar, kullanıcıların sitede daha uzun süre kalmasını sağlar ve dönüşüm oranlarını artırır.
Apache, bu önbellekleme mekanizmasını modüler bir yapıyla sunar. Ubuntu 14.04 üzerinde Apache 2.4 versiyonu genellikle varsayılan olarak gelir ve bu versiyon, önceki versiyonlara göre daha gelişmiş önbellekleme özelliklerine sahiptir.
2. Apache Önbellekleme Mekanizmaları ve Modülleri
Apache, içerik önbellekleme için bir dizi modül kullanır. Temel olarak, önbellekleme mantığını sağlayan bir çekirdek modül ve bu önbelleğin nerede (disk, bellek) depolanacağını belirleyen depolama modülleri bulunur.
2.1. mod_cache
mod_cache, Apache’nin temel önbellekleme modülüdür. Önbellekleme politikalarını yönetir, istekleri önbelleğe yönlendirir ve önbellekten yanıtları sunar. Ancak, içeriği kendisi depolamaz; bunun için alt modüllere ihtiyaç duyar.
2.2. mod_disk_cache
mod_disk_cache, önbelleğe alınan içeriği sunucunun dosya sisteminde (disk üzerinde) depolayan modüldür. Büyük miktarda veri önbelleklemek ve Apache yeniden başlatıldığında önbelleğin kalıcı olmasını sağlamak için idealdir. Disk I/O performansı, bu modülün etkinliği için önemli bir faktördür.
2.3. mod_mem_cache
mod_mem_cache, önbelleğe alınan içeriği sunucunun belleğinde (RAM) depolayan modüldür. Disk tabanlı önbelleğe göre çok daha hızlı erişim sağlar ancak bellek sınırlıdır ve Apache yeniden başlatıldığında önbellek içeriği kaybolur. Genellikle küçük, sık erişilen ve çok hızlı sunulması gereken içerikler için kullanılır. Bu modül genellikle mod_socache_shmcb ile birlikte çalışır.
2.4. mod_expires ve mod_headers
Bu modüller doğrudan önbellekleme depolaması yapmazlar, ancak istemci tarafı (tarayıcı) önbelleklemesini ve proxy sunucuların önbelleklemesini kontrol eden HTTP üstbilgilerini (Cache-Control, Expires) yönetmek için kritik öneme sahiptirler. Sunucu tarafı önbelleklemenin yanı sıra, istemci tarafı önbellekleme de performansı önemli ölçüde artırır.
3. Ön Hazırlıklar
Önbellekleme yapılandırmasına başlamadan önce, Ubuntu 14.04 sisteminizin güncel olduğundan ve Apache’nin kurulu olduğundan emin olmalısınız.
3.1. Sistem Güncelleme
Terminali açın ve aşağıdaki komutları çalıştırarak sisteminizi güncelleyin:
sudo apt-get update
sudo apt-get upgrade
3.2. Apache Kurulumu ve Kontrolü
Eğer Apache henüz kurulu değilse, aşağıdaki komutla kurabilirsiniz:
sudo apt-get install apache2
Apache servisinin çalıştığını kontrol etmek için:
sudo service apache2 status
Tarayıcınızda http://localhost adresine giderek Apache varsayılan sayfasını görmelisiniz.
3.3. Gerekli Modülleri Etkinleştirme
Apache önbellekleme için gerekli modülleri etkinleştirmemiz gerekiyor. Ubuntu’da bu işlem a2enmod komutu ile yapılır. Daha sonra Apache’yi yeniden başlatmayı unutmayın.
sudo a2enmod cache
sudo a2enmod disk_cache
sudo a2enmod mem_cache
sudo a2enmod headers
sudo a2enmod expires
sudo a2enmod rewrite # URL yeniden yazma için genellikle gereklidir
sudo a2enmod socache_shmcb # mod_mem_cache için gerekli
sudo service apache2 restart
Bu komutlar, Apache’nin önbellekleme yeteneklerini kullanabilmesi için gerekli olan tüm modülleri etkinleştirir.
4. mod_cache ve mod_disk_cache Yapılandırması
Disk tabanlı önbellekleme, büyük dosyalar ve uzun süreli önbellekleme için en yaygın kullanılan yöntemdir. Şimdi bu modüllerin nasıl yapılandırılacağını inceleyelim.
4.1. Cache Dizini Oluşturma ve İzinler
Önbellek dosyalarının depolanacağı bir dizin oluşturmamız ve Apache kullanıcısının (genellikle www-data) bu dizine yazma iznine sahip olduğundan emin olmamız gerekir.
sudo mkdir -p /var/cache/apache2/mod_disk_cache
sudo chown -R www-data:www-data /var/cache/apache2/mod_disk_cache
sudo chmod -R 755 /var/cache/apache2/mod_disk_cache
Bu komutlar, /var/cache/apache2/mod_disk_cache dizinini oluşturur ve Apache’nin bu dizine dosya yazıp okuyabilmesini sağlar.
4.2. Apache Ana Yapılandırması (apache2.conf)
Apache’nin ana yapılandırma dosyası genellikle /etc/apache2/apache2.conf veya /etc/apache2/conf-available/cache.conf gibi bir dosyada bulunur. Genel önbellekleme ayarlarını buraya ekleyebiliriz.
Aşağıdaki direktifleri ilgili yapılandırma dosyasına ekleyin (örneğin, /etc/apache2/conf-available/cache.conf oluşturup içine ekleyebilir, sonra sudo a2enconf cache ile etkinleştirebilirsiniz):
# Önbellek dizini ve önbellek tipi
CacheRoot "/var/cache/apache2/mod_disk_cache"
CacheEnable disk "/"
# Önbellek boyutu limitleri (isteğe bağlı)
# CacheMaxFileSize 10000000 # 10 MB'tan büyük dosyaları önbelleğe alma
# CacheMinFileSize 1000 # 1 KB'tan küçük dosyaları önbelleğe alma
# Önbellek dizini yönetimi (isteğe bağlı)
# CacheDirLevels 2 # Önbellek dizin yapısının derinliği
# CacheDirLength 1 # Her dizin seviyesindeki karakter sayısı
# Önbellek temizleme ayarları (isteğe bağlı, disk alanı yönetimi için)
# CacheMaxitems 10000 # Önbellekteki maksimum öğe sayısı
# CacheGcInterval 4 # Önbellek temizleme işlemi arasındaki dakika
# CacheGcMaxDocs 1000 # Bir temizleme işleminde maksimum silinecek belge
# CacheGcPercent 10 # Önbelleğin yüzde kaçının temizleneceği
# Önbellek kontrolü (Cache-Control üstbilgilerini yok sayma)
# CacheIgnoreNoLastMod On
# CacheIgnoreCacheControl On
# Önbelleğe alınacak HTTP yöntemleri (GET, HEAD varsayılan olarak önbelleğe alınır)
# CacheStoreNoStore Off
# CacheStorePrivate Off
# Önbellek yaşam süresi (eğer istemci veya kaynak sunucu tarafından belirtilmezse)
# CacheDefaultExpire 3600 # Varsayılan olarak 1 saat önbellekle
# Önbellek doğrulama ayarları
# CacheLastModifiedFactor 0.1 # Son değiştirilme zamanına göre önbellek geçerliliği
Açıklamalar:
CacheRoot "/var/cache/apache2/mod_disk_cache": Önbellek dosyalarının depolanacağı ana dizini belirtir.CacheEnable disk "/": Kök URL (/) altındaki tüm içerikler için disk tabanlı önbelleklemeyi etkinleştirir. Belirli URL’ler için de etkinleştirebilirsiniz, örneğinCacheEnable disk "/images"sadece resimleri önbellekler.CacheMaxFileSizeveCacheMinFileSize: Önbelleğe alınacak dosyaların boyut aralığını belirler. Çok büyük dosyaların önbelleğe alınması disk alanını hızla doldurabilirken, çok küçük dosyaların önbelleğe alınması performansa kayda değer bir katkı sağlamayabilir.CacheDirLevelsveCacheDirLength: Önbellek dizininin hiyerarşik yapısını kontrol eder. Varsayılan değerler genellikle yeterlidir, ancak çok sayıda dosya önbellekliyorsanız bu değerleri artırmak dosya sistemi performansını artırabilir. Örneğin,CacheDirLevels 2veCacheDirLength 1,/var/cache/apache2/mod_disk_cache/X/Y/filenameşeklinde bir yapı oluşturur.CacheDefaultExpire: Eğer kaynak sunucu veya istemci tarafından bir önbellek yaşam süresi belirtilmezse, bu direktif varsayılan bir yaşam süresi (saniye cinsinden) tanımlar.
4.3. Sanal Host Yapılandırması
Belirli bir sanal host (VirtualHost) için önbellekleme ayarlarını özelleştirmek isteyebilirsiniz. Bu durumda, ilgili sanal host’un yapılandırma dosyasına (örneğin, /etc/apache2/sites-available/example.com.conf) aşağıdaki direktifleri ekleyebilirsiniz:
ServerName example.com
DocumentRoot /var/www/example.com/public_html
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
# Bu sanal host için önbellekleme ayarları
CacheEnable disk "/static/"
CacheEnable disk "/images/"
CacheMaxFileSize 5000000 # 5 MB
CacheDisable /admin/ # Yönetici panelini önbelleğe alma
# Önbellek kontrolü
# Önbellekleme üstbilgilerini ayarla
Header set Cache-Control "max-age=3600, public"
ExpiresActive On
ExpiresByType image/jpeg "access plus 1 week"
ExpiresByType text/css "access plus 1 day"
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Bu örnekte:
CacheEnable disk "/static/"veCacheEnable disk "/images/": Sadece/static/ve/images/altındaki içeriklerin disk önbelleğine alınmasını sağlar.CacheDisable /admin/:/admin/dizini altındaki hiçbir içeriğin önbelleğe alınmamasını sağlar, çünkü yönetici paneli genellikle dinamiktir ve önbelleğe alınmamalıdır.Header set Cache-Control "max-age=3600, public": İstemci ve proxy sunuculara içeriğin 1 saat boyunca önbelleğe alınabileceğini söyler.ExpiresByType: Belirli MIME tipleri için istemci tarafı önbellek yaşam sürelerini ayarlar.
Yapılandırma değişikliklerinden sonra Apache’yi yeniden başlatmayı unutmayın:
sudo service apache2 restart
5. mod_mem_cache Yapılandırması
Bellek tabanlı önbellekleme, en hızlı erişimi sağlar ancak bellek kaynakları sınırlı olduğu için dikkatli kullanılmalıdır. Genellikle mod_disk_cache ile birlikte veya belirli küçük, kritik içerikler için tercih edilir.
5.1. Modülü Etkinleştirme
Daha önce sudo a2enmod mem_cache ve sudo a2enmod socache_shmcb komutlarını çalıştırarak bu modülleri etkinleştirdiğinizden emin olun.
5.2. Yapılandırma Direktifleri
Bellek önbelleklemesi için genellikle apache2.conf veya özel bir yapılandırma dosyasında (örneğin, /etc/apache2/conf-available/mem_cache.conf) aşağıdaki direktifler kullanılır:
# Bellek önbellek sağlayıcısını ve boyutunu ayarla
# socache_shmcb genellikle mod_mem_cache için en iyi seçenektir
CacheEnable mem "/"
MCacheSize 409600 # 400 MB bellek önbelleği (KB cinsinden)
MCacheMaxObjectCount 10000 # Maksimum 10.000 obje önbellekle
MCacheMinObjectSize 1 # 1 bayttan küçük objeleri önbelleğe alma
MCacheMaxObjectSize 51200 # 50 KB'tan büyük objeleri önbelleğe alma
# Önbellek yaşam süresi (eğer istemci veya kaynak sunucu tarafından belirtilmezse)
# MCacheDefaultExpire 600 # Varsayılan olarak 10 dakika önbellekle
# Önbellek temizleme ayarları (isteğe bağlı)
# MCacheRemovalAlgorithm GDSF # En az sık kullanılanları sil
Açıklamalar:
CacheEnable mem "/": Kök URL altındaki tüm içerikler için bellek tabanlı önbelleklemeyi etkinleştirir.MCacheSize 409600: Bellek önbelleğinin toplam boyutunu kilobayt cinsinden belirler (bu örnekte 400 MB). Bu değeri sunucunuzun boş RAM miktarına göre ayarlamanız önemlidir.MCacheMaxObjectCount: Bellek önbelleğinde depolanabilecek maksimum obje sayısını belirler.MCacheMinObjectSizeveMCacheMaxObjectSize: Bellek önbelleğine alınacak objelerin boyut aralığını belirler. Genellikle çok büyük dosyalar disk önbelleğine, daha küçük ve kritik dosyalar bellek önbelleğine alınır.MCacheDefaultExpire: Bellek önbelleğindeki objeler için varsayılan yaşam süresini (saniye cinsinden) belirler.
Yine, yapılandırma değişikliklerinden sonra Apache’yi yeniden başlatın:
sudo service apache2 restart
6. Önbellekleme Politikaları ve Kontrolü (mod_expires ve mod_headers)
Apache’nin kendi sunucu tarafı önbelleklemesinin yanı sıra, istemci tarafı (tarayıcı) ve ara proxy sunucuların (CDN’ler gibi) önbelleklemesini kontrol etmek de çok önemlidir. Bu, Cache-Control ve Expires HTTP üstbilgileri aracılığıyla yapılır.
6.1. mod_headers ile Cache-Control Üstbilgisi
mod_headers modülü, HTTP yanıt üstbilgilerini eklemenizi, değiştirmenizi veya silmenizi sağlar. Cache-Control üstbilgisi, içeriğin nasıl ve ne kadar süreyle önbelleğe alınabileceğini belirten en modern ve esnek yoldur.
Sanal host yapılandırmanıza veya bir dizin bloğuna ekleyebilirsiniz:
Header set Cache-Control "max-age=604800, public"
Header set Cache-Control "max-age=3600, public, must-revalidate"
Header set Cache-Control "no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "0"
max-age=604800: İçeriğin istemci tarafında 7 gün (604800 saniye) boyunca önbelleğe alınabileceğini belirtir.public: İçeriğin herhangi bir önbellek tarafından (hem istemci hem de proxy) önbelleğe alınabileceğini gösterir.must-revalidate: Önbellek süresi dolduğunda, istemcinin sunucuya içeriğin güncel olup olmadığını sorması gerektiğini belirtir.no-cache,no-store: İçeriğin hiçbir şekilde önbelleğe alınmaması gerektiğini belirtir. Genellikle dinamik veya hassas içerikler için kullanılır.
6.2. mod_expires ile Expires Üstbilgisi
mod_expires modülü, tarayıcıların ve proxy sunucuların içeriği belirli bir tarihe kadar önbelleğe almasını sağlayan Expires üstbilgisini otomatik olarak oluşturur. Bu, Cache-Control‘dan daha eski bir yöntem olsa da hala yaygın olarak kullanılır.
ExpiresActive On
ExpiresDefault "access plus 1 month"
ExpiresByType text/html "access plus 1 hour"
ExpiresByType text/css "access plus 1 week"
ExpiresByType application/javascript "access plus 1 week"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType application/pdf "access plus 1 month"
ExpiresByType application/x-shockwave-flash "access plus 1 month"
ExpiresActive On:mod_expires‘i etkinleştirir.ExpiresDefault "access plus 1 month": Eğer belirli bir MIME tipi için kural yoksa, varsayılan olarak içeriğin 1 ay boyunca önbelleğe alınabileceğini belirtir.ExpiresByType image/jpeg "access plus 1 month": JPEG resimlerinin 1 ay boyunca önbelleğe alınmasını sağlar.
Bu üstbilgiler, hem Apache’nin kendi önbelleklemesiyle hem de genel web performansıyla birlikte çalışarak en iyi sonuçları verir.
7. Önbellek Geçersiz Kılma (Cache Invalidation)
Önbellekleme, içerik güncellemelerini zorlaştırabilir. Bir içerik değiştiğinde, önbellekte eski sürüm kalabilir. Bu durumu önlemek için önbelleğin geçersiz kılınması (invalidation) gerekir.
7.1. Manuel Temizleme
Disk tabanlı önbellek için, önbellek dizinini manuel olarak silebilirsiniz:
sudo rm -rf /var/cache/apache2/mod_disk_cache/*
sudo service apache2 restart # Apache'yi yeniden başlatmak mod_mem_cache'i temizler
Bu yöntem, önbelleği tamamen temizler. Ancak, dinamik bir web sitesinde her içerik güncellemesinde bunu yapmak pratik değildir.
7.2. Programatik Temizleme ve Akıllı Politikalar
- Versiyonlama (Versioning): Statik dosyalar için en iyi yöntemlerden biri, dosya adlarına veya URL’lere bir versiyon numarası veya hash eklemektir (örneğin,
style.css?v=1.2veyastyle.1a2b3c.css). İçerik değiştiğinde versiyon numarasını güncellerseniz, tarayıcılar ve proxy’ler otomatik olarak yeni sürümü ister. Cache-Control: no-cacheveyamust-revalidate: Dinamik içerikler için, sunucunun her zaman güncel bir kopya için doğrulaması gerektiğini belirtmek üzere bu üstbilgileri kullanın.- Apache’nin
Cache-ControlDirektifleri:CacheMaxExpire,CacheLastModifiedFactorgibi direktiflerle Apache’nin önbellek doğrulama davranışını ayarlayabilirsiniz. - Önbellek Anahtarı (Cache Key) Değişimi: Özellikle ters proxy önbelleklemesinde (örneğin, Varnish ile Apache önünde), bir içeriğin önbellek anahtarını değiştirerek yeni bir önbellek girdisi oluşturulmasını sağlayabilirsiniz.
8. Önbelleklemenin Test Edilmesi
Önbelleklemenin doğru çalıştığından emin olmak için birkaç farklı yöntemle test yapabilirsiniz.
8.1. HTTP Üstbilgileri Kontrolü
Tarayıcınızın geliştirici araçlarını (F12) kullanarak Ağ (Network) sekmesinden bir sayfa isteği yapın ve yanıt üstbilgilerini inceleyin.
Cache-ControlveExpiresüstbilgilerinin beklediğiniz değerleri içerdiğinden emin olun.- Apache’nin kendi önbelleklemesi etkinse, genellikle
X-CacheveyaX-Cache-Lookupgibi özel üstbilgiler görürsünüz. Örneğin:X-Cache: HIT from example.com: İçerik önbellekten sunuldu.X-Cache: MISS from example.com: İçerik önbellekte bulunamadı ve kaynak sunucudan alındı.
8.2. Apache Erişim Logları
Apache erişim loglarını (/var/log/apache2/access.log) inceleyerek isteklerin durumunu görebilirsiniz. Önbellekten gelen istekler genellikle daha hızlı yanıt sürelerine sahip olacaktır.
8.3. Cache Dizini Kontrolü (Disk Önbelleği İçin)
Eğer mod_disk_cache kullanıyorsanız, /var/cache/apache2/mod_disk_cache dizinine bakarak önbellek dosyalarının oluşup oluşmadığını kontrol edebilirsiniz:
sudo ls -l /var/cache/apache2/mod_disk_cache
Bu dizin altında hiyerarşik bir yapı ve önbelleğe alınan içeriğin ikili temsillerini göreceksiniz.
9. Performans İpuçları ve En İyi Uygulamalar
Apache önbelleklemesinden en iyi şekilde yararlanmak için bazı ipuçları ve en iyi uygulamalar:
- Doğru Önbellekleme Stratejisi: Her şeyi önbelleklemeye çalışmayın. Statik dosyalar (resimler, CSS, JS), sık güncellenmeyen dinamik içerik parçaları veya tam sayfalar için önbellekleme en etkilidir. Kullanıcıya özel (kişiselleştirilmiş) veya sık güncellenen içerikler için önbellekleme yapmaktan kaçının veya kısa süreli önbellekleme kullanın.
- Önbellek Boyutu ve Konumu: Disk önbelleği için yeterli disk alanı ayırın. Bellek önbelleği için sunucunuzun boş RAM miktarını göz önünde bulundurun. Aşırı bellek kullanımı sistemi yavaşlatabilir.
mod_disk_cachevemod_mem_cacheKombinasyonu: Sık erişilen küçük dosyaları (ikonlar, küçük CSS/JS)mod_mem_cacheile, daha büyük ve daha az sık erişilen statik dosyaları (büyük resimler, PDF’ler)mod_disk_cacheile önbelleklemek iyi bir stratejidir.- İstemci Tarafı Önbellekleme Önceliği: Her zaman önce istemci tarafı önbelleklemeyi optimize edin (
Cache-Control,Expires). Bu, sunucuya hiç istek gelmemesini sağlayarak en büyük performansı sunar. - GZIP Sıkıştırma: Önbelleklemenin yanı sıra,
mod_deflateile içerik sıkıştırmayı etkinleştirmek de bant genişliği kullanımını azaltır ve yükleme sürelerini hızlandırır. Sıkıştırılmış içerik önbelleğe alınmalıdır. - Dinamik İçerik ve Kimlik Doğrulama: Kimlik doğrulaması gerektiren sayfaları veya kullanıcıya özel dinamik içerikleri önbelleğe almaktan kaçının. Yanlışlıkla bir kullanıcının kişisel verilerini başka bir kullanıcıya sunabilirsiniz. Eğer önbelleklemek zorundaysanız,
Vary: CookieveyaVary: Authorizationgibi üstbilgileri kullanarak farklı kullanıcılar için farklı önbellek kopyaları oluşturulmasını sağlayın. - SSL/TLS ile Önbellekleme: HTTPS üzerinden sunulan içerikler genellikle varsayılan olarak önbelleğe alınmaz (
Cache-Control: private). Güvenli içeriği önbelleklemek istiyorsanız,Cache-Control: publicüstbilgisini dikkatli bir şekilde kullanmanız gerekebilir. - Apache Yeniden Başlatma: Önbellekleme yapılandırmasında herhangi bir değişiklik yaptıktan sonra Apache’yi yeniden başlatmayı unutmayın.
10. Sıkça Sorulan Sorular (SSS)
10.1. Apache önbelleği ne kadar yer kaplamalı?
Bu, web sitenizin boyutuna, trafiğine ve önbelleklemek istediğiniz içeriğin miktarına bağlıdır. Disk önbelleği için yüzlerce MB’tan birkaç GB’a kadar değişebilir. Bellek önbelleği için genellikle 100 MB ile 500 MB arası bir değer yeterli olabilir, ancak sunucunuzun toplam RAM’ini ve diğer uygulamaların bellek ihtiyacını göz önünde bulundurmalısınız.
10.2. Önbellek dizinini nereye oluşturmalıyım?
Genellikle /var/cache/apache2/ altında özel bir dizin (örneğin, mod_disk_cache) oluşturmak en iyi uygulamadır. Bu, standart bir konumdur ve sistem bakımı sırasında kolayca bulunabilir.
10.3. Önbellekleme, dinamik PHP sayfaları için de çalışır mı?
Evet, Apache mod_cache, PHP tarafından oluşturulan HTML çıktısını da önbelleğe alabilir. Ancak, PHP betiği tarafından gönderilen Cache-Control üstbilgileri Apache’nin önbellekleme davranışını etkileyecektir. Eğer PHP no-cache gönderiyorsa, Apache bunu dikkate alacaktır. Bu durumda, CacheIgnoreCacheControl On direktifini kullanmanız gerekebilir, ancak bunu dikkatli yapın, çünkü dinamik içeriği yanlışlıkla önbellekleyebilirsiniz.
10.4. Önbellek temizleme işlemini otomatikleştirebilir miyim?
Evet, CacheGcInterval, CacheGcMaxDocs ve CacheGcPercent gibi direktifler, Apache’nin kendi önbellek temizleme mekanizmalarını sağlar. Daha gelişmiş otomasyon için, web uygulamanızda bir içerik güncellendiğinde Apache önbelleğini temizleyen özel bir betik (örneğin, rm -rf /var/cache/apache2/mod_disk_cache/* komutunu çalıştıran) yazabilirsiniz.
11. Sorun Giderme
Önbellekleme yapılandırmasında karşılaşabileceğiniz bazı yaygın sorunlar ve çözümleri:
- Önbellek Oluşmuyor:
mod_cache,mod_disk_cache/mod_mem_cachemodüllerinin etkin olduğundan emin olun (sudo a2enmod).- Önbellek dizininin (
CacheRoot) doğru olduğundan ve Apache kullanıcısının (www-data) bu dizine yazma izinlerine sahip olduğundan emin olun (sudo chown,sudo chmod). - Apache hata loglarını (
/var/log/apache2/error.log) kontrol edin. CacheEnabledirektifinin doğru kapsamda (genel, sanal host, konum) ve doğru URL’ler için tanımlandığından emin olun.
- Eski İçerik Sunuluyor:
- Önbellek yaşam sürelerini (
CacheDefaultExpire,ExpiresByType,Cache-Control max-age) kontrol edin. Çok uzun ayarlanmış olabilirler. - Kaynak sunucunun veya PHP uygulamasının
Cache-Control: no-cacheveyaExpires: 0gibi üstbilgiler göndermediğinden emin olun. - Gerekirse önbelleği manuel olarak temizleyin ve Apache’yi yeniden başlatın.
- İstemci tarafı tarayıcı önbelleğini de temizlemeyi unutmayın (Ctrl+F5 veya Shift+F5).
- Önbellek yaşam sürelerini (
- Performans Artışı Yok:
- Önbelleğe alınan içeriğin gerçekten sık erişilen içerik olup olmadığını kontrol edin.
X-Cacheüstbilgisini kontrol ederek önbellek hit oranını gözlemleyin. Eğer çoğu istek MISS olarak dönüyorsa, önbellekleme stratejinizi gözden geçirin.- Sunucunuzda yeterli RAM veya hızlı disk I/O olduğundan emin olun.
12. Sonuç
Apache içerik önbelleklemesi, web sitenizin performansını artırmak, sunucu yükünü azaltmak ve kullanıcı deneyimini iyileştirmek için güçlü bir araçtır. Ubuntu 14.04 üzerinde mod_cache, mod_disk_cache ve mod_mem_cache modüllerini doğru bir şekilde yapılandırarak, statik ve dinamik içeriklerinizi etkin bir şekilde önbelleğe alabilirsiniz. Ayrıca, mod_expires ve mod_headers ile istemci tarafı önbelleklemesini optimize etmek, genel web performansınızı daha da artıracaktır. Yapılandırma sırasında dikkatli olmak, önbellek politikalarını doğru belirlemek ve düzenli olarak test etmek, sorunsuz ve yüksek performanslı bir web sunucusu için kritik öneme sahiptir.