Web sitenizin hızı, ziyaretçi deneyimini ve SEO sıralamanızı doğrudan etkileyen en kritik faktörlerden biri. OpenLiteSpeed, LiteSpeed’in açık kaynak versiyonu olarak özellikle WordPress ve PHP tabanlı siteler için inanılmaz performans sunuyor. Buna pgCache (LiteSpeed Cache) entegrasyonunu eklediğinizde, sunucunuzun her istek için PHP ve veritabanı işlemleri yapması yerine önceden hazırlanmış statik HTML sayfaları doğrudan servis etmesi mümkün oluyor. Bu yazıda OpenLiteSpeed üzerinde pgCache ve tam sayfa önbellekleme kurulumunu, yapılandırmasını ve optimizasyonunu gerçek dünya senaryolarıyla ele alacağız.
OpenLiteSpeed ve LiteSpeed Cache Nasıl Çalışır?
OpenLiteSpeed, kendi önbellek motoru olan LSCache üzerine inşa edilmiştir. Apache veya Nginx’te önbellekleme için harici modüller gerekirken, OpenLiteSpeed’de bu mekanizma sunucunun çekirdeğine entegre edilmiştir. Bu sayede önbellek dosyaları disk I/O olmadan doğrudan bellek üzerinden servis edilebilir.
pgCache terimi WordPress camiasında biraz karmaşıklık yaratıyor. Bazı kaynaklarda bu terim, LiteSpeed Cache eklentisinin tam sayfa önbellekleme (full page cache) özelliğini ifade etmek için kullanılıyor. OpenLiteSpeed bağlamında ise bu, sunucu tarafında LSCache motoruyla, WordPress tarafında ise LiteSpeed Cache (LSCWP) eklentisiyle gerçekleştirilen bir tam sayfa önbellekleme sistemidir.
Bir ziyaretçi sitenize ilk kez girdiğinde PHP işler, veritabanı sorgular ve HTML oluşturur. Bu HTML önbelleğe alınır. Sonraki ziyaretçi aynı sayfayı açtığında OpenLiteSpeed, PHP ve MySQL’e hiç uğramadan hazır HTML’i doğrudan gönderir. Fark çoğu zaman 10x ile 100x arasında değişiyor.
Ön Gereksinimler ve Kurulum Ortamı
Bu rehberde Ubuntu 22.04 üzerinde OpenLiteSpeed 1.7.x ve WordPress ile çalışıyoruz. Sistemde şunların kurulu olduğunu varsayıyoruz:
- OpenLiteSpeed (en az 1.6.x)
- PHP 8.1 (LSPHP)
- MariaDB veya MySQL
- WordPress kurulumu
OpenLiteSpeed kurulu değilse hızlıca kurmak için:
# LiteSpeed repo ekle
wget -O - https://repo.litespeed.sh | sudo bash
# OpenLiteSpeed kur
sudo apt-get install openlitespeed
# LSPHP 8.1 kur
sudo apt-get install lsphp81 lsphp81-common lsphp81-mysql lsphp81-opcache
# Servisi başlat
sudo systemctl start lsws
sudo systemctl enable lsws
OpenLiteSpeed’in çalıştığını doğrulayın:
sudo systemctl status lsws
# veya
sudo /usr/local/lsws/bin/lswsctrl status
LSCache Modülünü Aktif Etmek
OpenLiteSpeed Admin paneline girip (varsayılan port 7080) LSCache modülünün aktif olduğunu kontrol etmek gerekiyor. Ancak komut satırından da doğrulayabilirsiniz:
# LSCache modülünün yüklenip yüklenmediğini kontrol et
ls /usr/local/lsws/modules/ | grep cache
# OpenLiteSpeed versiyonunu ve modülleri gör
/usr/local/lsws/bin/openlitespeed -v
Admin panelinde Server Configuration > Modules altında cache modülünün listelendiğini göreceksiniz. Eğer listede yoksa manuel olarak eklemeniz gerekir.
Virtual Host Yapılandırması için Cache Dizini Oluşturma
OpenLiteSpeed, önbellek dosyalarını belirli bir dizinde saklar. Bu dizini oluşturup gerekli izinleri verin:
# Cache dizini oluştur
sudo mkdir -p /usr/local/lsws/cachedata/vhosts/siteniz.com
sudo chown -R nobody:nogroup /usr/local/lsws/cachedata/
sudo chmod -R 755 /usr/local/lsws/cachedata/
# WordPress klasörü için de kontrol edin
sudo chown -R nobody:nogroup /var/www/siteniz.com/html/
Virtual Host Cache Yapılandırması
OpenLiteSpeed’de her virtual host için önbellek yapılandırması ayrı ayrı yapılır. Admin paneli üzerinden yapabileceğiniz gibi, yapılandırma dosyasını doğrudan düzenleyerek de ilerleyebilirsiniz.
Virtual host yapılandırma dosyasını düzenleyelim:
sudo nano /usr/local/lsws/conf/vhosts/siteniz.com/vhconf.conf
Dosyaya aşağıdaki cache bloğunu ekleyin:
module cache {
checkPrivateCache 1
checkPublicCache 1
maxCacheObjSize 10000000
maxStaleAge 200
qsCache 1
reqCookieCache 0
respCookieCache 0
ignoreReqCacheCtrl 1
ignoreRespCacheCtrl 0
enableCache 0
expireInSeconds 86400
enablePrivateCache 0
privateExpireInSeconds 3600
storagePath /usr/local/lsws/cachedata/vhosts/siteniz.com
}
Yapılandırmayı açıklayalım:
- checkPrivateCache: Kullanıcıya özel önbellek kontrolünü aktifleştirir
- checkPublicCache: Herkese açık önbellek kontrolünü aktifleştirir
- maxCacheObjSize: Önbelleğe alınacak maksimum nesne boyutu (byte cinsinden, burada ~10MB)
- maxStaleAge: Önbellek süresi dolduğunda bayat içeriğin kaç saniye daha servis edilebileceği
- qsCache: Query string parametreli URL’lerin önbelleğe alınması
- expireInSeconds: Önbellek süresi (saniye, burada 24 saat)
- storagePath: Önbellek dosyalarının fiziksel konumu
Değişikliği uygulamak için:
sudo /usr/local/lsws/bin/lswsctrl reload
WordPress için LiteSpeed Cache Eklentisi Kurulumu
Sunucu tarafı yapılandırmasını tamamladıktan sonra WordPress eklentisini kurma zamanı. Bu eklenti, sunucuya hangi sayfaların önbelleğe alınacağını, hangilerinin alınmayacağını söyler.
# WP-CLI ile kurulum (önerilen yöntem)
cd /var/www/siteniz.com/html/
wp plugin install litespeed-cache --activate --allow-root
# Eklenti durumunu kontrol et
wp plugin status litespeed-cache --allow-root
Manuel kurulum tercih ederseniz WordPress eklenti dizinine yükleyip aktifleştirmeniz yeterli. Eklenti aktif olduğunda WordPress admin panelinde LiteSpeed Cache menüsü belirir.
Eklenti Temel Ayarları
WordPress admin panelinden LiteSpeed Cache > Cache > Cache Control bölümüne gidin. Kritik ayarlar:
- Enable Cache: Açık olmalı
- Cache Logged-in Users: Genellikle kapalı tutun (güvenlik ve kişiselleştirme için)
- Cache Commenters: Kapalı tutun
- Cache REST API: İhtiyaca göre açın
- Cache Login Page: Kapalı tutun
- Cache favicon.ico: Açık olabilir
Komut satırından da bu ayarları yapabilirsiniz:
# WP-CLI ile cache ayarlarını yap
wp litespeed-option set cache-browser 1 --allow-root
wp litespeed-option set cache 1 --allow-root
wp litespeed-option set cache-mobile 1 --allow-root
# Mevcut ayarları listele
wp litespeed-option list --allow-root | grep cache
Tam Sayfa Önbellekleme (Full Page Cache) Optimizasyonu
Temel kurulum tamam, şimdi gerçek performansı ortaya çıkaracak ayarlara geçelim.
TTL (Time To Live) Yapılandırması
Her sayfa türü için farklı önbellek süreleri belirlemek en doğru yaklaşım. Ana sayfa sık değişirken, arşiv sayfaları nadiren güncellenir.
# WP-CLI ile TTL ayarları
wp litespeed-option set cache-ttl-pub 86400 --allow-root # Public sayfalar: 24 saat
wp litespeed-option set cache-ttl-front 1800 --allow-root # Ana sayfa: 30 dakika
wp litespeed-option set cache-ttl-feed 2592000 --allow-root # RSS feed: 30 gün
wp litespeed-option set cache-ttl-rest 300 --allow-root # REST API: 5 dakika
Önbellek Dışında Tutulacak URL’ler
Bazı sayfalar asla önbelleğe alınmamalı. Checkout, sepet, kullanıcı profili gibi dinamik içerikler için bu kritiktir:
sudo nano /usr/local/lsws/conf/vhosts/siteniz.com/vhconf.conf
Virtual host yapılandırmasına rewrite kuralları ekleyin:
rewrite {
enable 1
autoLoadHtaccess 1
}
# .htaccess dosyasına da ekleyebilirsiniz:
WordPress .htaccess dosyasını düzenleyin:
sudo nano /var/www/siteniz.com/html/.htaccess
# WooCommerce ve dinamik sayfalar için cache bypass
<IfModule LiteSpeed>
RewriteEngine On
# Sepet ve ödeme sayfalarını önbellekten çıkar
RewriteCond %{REQUEST_URI} ^/cart/ [NC]
RewriteRule .* - [E=cache-control:no-cache]
RewriteCond %{REQUEST_URI} ^/checkout/ [NC]
RewriteRule .* - [E=cache-control:no-cache]
RewriteCond %{REQUEST_URI} ^/my-account/ [NC]
RewriteRule .* - [E=cache-control:no-cache]
# Admin alanını önbellekten çıkar
RewriteCond %{REQUEST_URI} ^/wp-admin/ [NC]
RewriteRule .* - [E=cache-control:no-cache]
</IfModule>
Önbellek Doğrulama ve Test
Yapılandırmayı doğrulamak için HTTP header’larını kontrol edin. Doğru çalışan bir önbellekte şu header’ları görmelisiniz:
# curl ile header kontrolü
curl -I https://siteniz.com/
# Beklenen output (önbellekten servis ediliyorsa):
# X-LiteSpeed-Cache: hit
# X-LiteSpeed-Tag: ...
# İlk istekte (önbellek yoksa):
# X-LiteSpeed-Cache: miss
# Önbellekten çıkarılmış sayfalarda:
# X-LiteSpeed-Cache: no-cache
Birden fazla URL’yi test etmek için:
#!/bin/bash
# cache_test.sh - Önbellek durumunu kontrol et
URLS=(
"https://siteniz.com/"
"https://siteniz.com/blog/"
"https://siteniz.com/hakkimizda/"
)
for url in "${URLS[@]}"; do
echo "Testing: $url"
cache_status=$(curl -sI "$url" | grep -i "x-litespeed-cache:" | tr -d 'r')
echo " Cache Status: $cache_status"
echo ""
done
Bu scripti çalıştırılabilir yapıp test edin:
chmod +x cache_test.sh
./cache_test.sh
Önbellek Temizleme Stratejileri
Önbellek yönetiminin en kritik parçası, içerik güncellendiğinde önbelleğin doğru zamanda temizlenmesidir.
Otomatik Temizleme (Purge)
LiteSpeed Cache eklentisi, WordPress’te bir yazı güncellendiğinde ilgili sayfaları otomatik olarak temizler. Ancak bu davranışı özelleştirebilirsiniz:
# WP-CLI ile manual purge
wp litespeed-purge all --allow-root
# Belirli URL'yi temizle
wp litespeed-purge url https://siteniz.com/belirli-sayfa/ --allow-root
# Frontend cache temizle
wp litespeed-purge front --allow-root
Zamanlı Önbellek Temizleme (Cron)
Yüksek trafikli sitelerde önbelleği belirli aralıklarla yenilemek isteyebilirsiniz:
# crontab -e ile ekleyin
# Her gece saat 03:00'da önbelleği temizle
0 3 * * * cd /var/www/siteniz.com/html && wp litespeed-purge all --allow-root --quiet 2>/dev/null
OpenLiteSpeed Tarafından Manuel Temizleme
Sunucu tarafında doğrudan önbellek dosyalarını silmek için:
# Tüm cache dizinini temizle
sudo rm -rf /usr/local/lsws/cachedata/vhosts/siteniz.com/*
# Servisi yeniden başlatmaya gerek yok, OS değişiklikleri algılar
# Ama reload yapabilirsiniz
sudo /usr/local/lsws/bin/lswsctrl reload
Browser Cache ve CDN Entegrasyonu
Tam sayfa önbelleklemenin yanında tarayıcı önbelleklemesi de performansı önemli ölçüde artırır:
sudo nano /var/www/siteniz.com/html/.htaccess
# Statik dosyalar için browser cache
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/webp "access plus 1 year"
ExpiresByType image/svg+xml "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
ExpiresByType application/x-font-woff2 "access plus 1 year"
</IfModule>
# Cache-Control header'ları
<IfModule mod_headers.c>
<FilesMatch ".(ico|jpg|jpeg|png|gif|webp|svg)$">
Header set Cache-Control "max-age=31536000, public"
</FilesMatch>
<FilesMatch ".(css|js)$">
Header set Cache-Control "max-age=2592000, public"
</FilesMatch>
</IfModule>
Gerçek Dünya Senaryosu: WooCommerce Sitesi
WooCommerce çalıştıran bir e-ticaret sitesinde önbellekleme özel dikkat ister. Sepet durumu, kullanıcı girişi ve fiyat değişkenleri nedeniyle bazı bölümlerin önbelleklenmemesi gerekir.
# WooCommerce için özel LiteSpeed Cache yapılandırması
wp litespeed-option set cache-exc_roles editor,shop_manager,administrator --allow-root
# WooCommerce cookie'leri için
wp litespeed-option set cache-drop_qs "add-to-cart,variation_id" --allow-root
# ESI (Edge Side Includes) aktifleştir - dinamik widget'lar için
wp litespeed-option set esi 1 --allow-root
wp litespeed-option set esi-cart-enable 1 --allow-root
ESI (Edge Side Includes) özelliği, sayfanın büyük bölümünü önbelleklerken sepet widget’ı gibi dinamik parçaları her seferinde taze olarak servis etmenizi sağlar. Bu WooCommerce için mükemmel bir çözümdür.
Ayrıca stok değişikliklerinde otomatik cache temizleme için WordPress’e bir hook ekleyebilirsiniz:
# wp-content/mu-plugins/cache-invalidation.php dosyası oluşturun
sudo nano /var/www/siteniz.com/html/wp-content/mu-plugins/cache-invalidation.php
<?php
// Stok değiştiğinde ilgili ürün sayfasını temizle
add_action('woocommerce_product_set_stock', function($product) {
if (function_exists('run_action')) {
do_action('litespeed_purge_post', $product->get_id());
}
});
Önbellek Performansını İzleme
Önbellek isabet oranını (cache hit ratio) izlemek, sisteminizin ne kadar verimli çalıştığını gösterir:
# OpenLiteSpeed log dosyalarından cache istatistikleri
sudo grep "cache hit" /usr/local/lsws/logs/access.log | wc -l
sudo grep "cache miss" /usr/local/lsws/logs/access.log | wc -l
# Son 1000 istekte cache durumu
sudo tail -1000 /usr/local/lsws/logs/access.log | grep -o 'cache=[a-z]*' | sort | uniq -c
Daha detaylı izleme için access log formatını güncelleyin:
sudo nano /usr/local/lsws/conf/httpd_config.conf
Log formatına cache bilgisi ekleyin:
accessLog {
useServer 0
fileName logs/access.log
logFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-agent}i" cache=%{x-litespeed-cache}o"
logHeaders 5
rollingSize 10M
keepDays 30
}
Bu değişiklikten sonra servisi yeniden yükleyin:
sudo /usr/local/lsws/bin/lswsctrl reload
# Yeni log formatını test et
sudo tail -f /usr/local/lsws/logs/access.log | grep "cache="
Sık Karşılaşılan Sorunlar ve Çözümleri
Önbellek hiç çalışmıyor:
X-LiteSpeed-Cacheheader’ının her istektemissgöstermesi en yaygın işarettir- Virtual host yapılandırmasında
checkPublicCache 1satırının olduğunu doğrulayın - WordPress eklentisinde “Enable Cache” seçeneğinin açık olduğunu kontrol edin
- LSCache modülünün admin panelinde aktif olduğunu gözlemleyin
Giriş yapmış kullanıcılar önbellekten servis ediliyor:
cache-logged_inseçeneğinin kapalı olduğundan emin olunwordpress_logged_in_*cookie’sinin blacklist’te olup olmadığını kontrol edin
WooCommerce sepet bilgileri karışıyor:
- ESI özelliğini aktifleştirin
woocommerce_session_vewp_woocommerce_session_cookie’lerini önbellek dışı bırakın.htaccessdosyasındaki checkout ve cart URL bypass kurallarını doğrulayın
Önbellek dizinine yazma hatası:
sudo chown -R nobody:nogroup /usr/local/lsws/cachedata/komutunu tekrar çalıştırınsudo chmod -R 755 /usr/local/lsws/cachedata/ile izinleri düzeltin
Sonuç
OpenLiteSpeed ile pgCache ve tam sayfa önbellekleme sistemi doğru yapılandırıldığında, sunucunuzun PHP işlem yükünü dramatik biçimde azaltır ve sayfa yükleme sürelerini milisaniyelere indirir. Özellikle trafik artışlarında bu fark kritik hale gelir; sunucunuz çökmek yerine rahatlıkla ölçeklenir.
Özetlemek gerekirse yapmanız gerekenler şöyle sıralanır: LSCache modülünü aktif edin ve virtual host yapılandırmasına cache bloğunu ekleyin. Ardından LiteSpeed Cache WordPress eklentisini kurup temel ayarları yapın. Dinamik sayfalara (sepet, checkout, hesap) bypass kuralları tanımlayın. WooCommerce kullanıyorsanız ESI özelliğini aktifleştirin. Son olarak curl -I ve log dosyaları ile önbellek isabet oranını izleyin.
Önbellekleme tek seferlik bir kurulum değil, sürekli izlenmesi ve iyileştirilmesi gereken bir süreçtir. Sitenizin trafik yapısına ve içerik güncelleme sıklığına göre TTL değerlerini zaman içinde optimize etmek, uzun vadede en iyi performansı elde etmenizi sağlayacaktır.