OpenLiteSpeed ile pgCache ve Tam Sayfa Önbellekleme

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-Cache header’ının her istekte miss göstermesi en yaygın işarettir
  • Virtual host yapılandırmasında checkPublicCache 1 satı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_in seçeneğinin kapalı olduğundan emin olun
  • wordpress_logged_in_* cookie’sinin blacklist’te olup olmadığını kontrol edin

WooCommerce sepet bilgileri karışıyor:

  • ESI özelliğini aktifleştirin
  • woocommerce_session_ ve wp_woocommerce_session_ cookie’lerini önbellek dışı bırakın
  • .htaccess dosyası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ın
  • sudo 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.

Yorum yapın