Web sitesi önbelleği & sunucu içi önbellek: WordPress önbelleği nasıl çalışır

Web sitesi önbelleğini ve sunucu içi önbelleği Nginx + Apache yapılandırmalı bir sunucuda kontrol ettiğimde, WordPress sayfa istekleri tarayıcıdan başlayıp CDN, sayfa önbelleği, OPcache ve Redis sırasıyla aşağı indi ve kopyası bulunan katmanda durdu. Doğrudan kaynak sunucuya gelen sayfa isteklerinde nginx, WP Rocket'in oluşturduğu HTML dosyasını hemen gönderdi; istekler PHP'ye ve veritabanına kadar inmedi.
Ⅰ. WordPress önbellek yapısı
Bilgisayarlarda önbellek, verilere hızlı erişilebilmesi için onları geçici olarak saklayan bir tekniktir; web'de de aynı ilkeyle çalışır ve performansı artırmaya büyük katkı sağlar.
Önbelleğe alma verileri sakladığı için ziyaretçi bir web sitesine her girdiğinde her şey sunucudan yeniden istenmez; saklanan veriler hızla yüklenir ve sayfa yükleme süresi kısalır. Böylece sunucu yükü azalır ve kullanıcı deneyimi iyileşir.
WordPress isteklerinde kullanılan önbellekler iki kola ayrılır: web sitesi önbelleği ve sunucu içi önbellek. HTTP önbellekleme standardı, MDN'in anlattığı biçimiyle, yalnızca tek bir ziyaretçinin tarayıcısında saklanan önbelleği private cache, birçok ziyaretçinin ortak kullandığı CDN ve proxy önbelleklerini ise shared cache olarak ayırır; bu yazıda bu ikisini web sitesi önbelleği olarak bir araya getirdim.
Sayfa önbelleği, OPcache ve nesne önbelleği, WordPress'in sunucu içinde çalıştığı sürece eklenen önbelleklerdir. HTTP standardında bunlar için ayrı bir sınıf yoktur; WordPress resmî belgeleri bunları önbellekleme eklentileri (sayfa önbelleği), nesne önbelleği ve sunucu önbelleği (OPcache gibi opcode önbellekleri) olarak ayırarak anlatır.
Önbelleğin kullanıldığı tüm alanları Önbellek: tanımı ve önbelleğe almanın kullanıldığı tüm alanlar yazısında, önbelleği de kapsayan performans optimizasyonunun dört dalını ise Web performansı optimizasyonu: yapısı ve tanımı yazısında anlattım.
Aşağıdaki simülatörde soldaki ağaçtan bir önbellek seçip bir düğmeye basarsanız isteğin hangi katmanda durduğunu görebilirsiniz. WordPress site sahiplerinin bir önbellekleme eklentisiyle ilk açtığı katman sayfa önbelleğidir.
| Katman | Saklandığı yer | Sakladığı şey | Nginx + Apache yapılandırması örneği |
|---|---|---|---|
| Tarayıcı önbelleği | Ziyaretçinin cihazı | HTML · CSS · JS · görseller · yazı tipleri | CSS · görseller 7 gün |
| CDN · proxy önbelleği | Sunucunun önü (edge · ters proxy) | Sayfa · statik dosya kopyaları | Bunny CDN |
| Sayfa önbelleği | Sunucu diski · belleği | PHP'nin oluşturduğu HTML | WP Rocket + nginx |
| OPcache | Sunucu belleği | PHP bayt kodu | PHP 8.3, JIT kapalı |
| Nesne önbelleği | Sunucu belleği | Sorgu sonuçları · nesneler | Redis |
Ⅱ. Web sitesi önbelleği
Web sitesi önbelleği, sunucu yanıt başlıklarıyla nasıl saklanacağını bildirdiğinde ziyaretçinin tarayıcısının ve CDN ile proxy'lerin bu talimata göre kopya sakladığı önbellektir. Başlıca başlıklar şunlardır: [Cache-Control], [ETag] ve [Expires]. Saklama süresi dolunca koşullu bir istekle ([304 Not Modified]) değişip değişmediği kontrol edilir.
1️⃣ Tarayıcı önbelleği
Tarayıcı önbelleği, ziyaretçinin web tarayıcısında saklanan HTTP önbelleğidir; HTML, CSS, JavaScript, görselleri ve yazı tiplerini saklar ve aynı kaynak yeniden istendiğinde sunucuya hiç gitmez ya da yalnızca değişip değişmediğini kontrol eder.
Saklama süresini ziyaretçi değil sunucu belirler. Aşağıdaki Nginx + Apache yapılandırmalı sunucu CSS ve görseller için 7 gün belirtir, HTML sayfalarını ise süre vermeden, her yeni ziyarette yeniden kontrol edilecek şekilde yanıtlar.
If-None-Match: "6ab12775-2ee8"cache-control: max-age=604800 expires: Sat, 17 Oct 2026 03:21:00 GMT etag: "6ab12775-2ee8"
etag: "6ac9298c-95575" last-modified: Fri, 09 Oct 2026 17:51:08 GMT
2️⃣ CDN · proxy önbelleği
CDN ve proxy önbellekleri, ziyaretçiler ile kaynak sunucu arasında bulunan ve birçok ziyaretçinin ortak kullandığı önbelleklerdir. İleri proxy şirket ağlarında olduğu gibi ziyaretçi tarafının önünde, ters proxy ve CDN ise sunucunun önünde durarak kaynak sunucu yerine saklanan kopyayla yanıt verir.
Tipik bir ters proxy örneği Varnish Cache olup Bunny CDN ve Akamai gibi CDN'ler de aynı yapıyı izler. Bölgesel DNS kullanılırsa kaynak sunucunun bulunduğu bölgedeki ziyaretçiler doğrudan kaynak sunucuya bağlanır, diğer bölgelerdeki ziyaretçilere ise HTML'yi bile saklayan yakındaki bir CDN edge sunucusu (ör. Bunny CDN) yanıt verir.
CDN'in yapısını ve avantajlarını CDN nedir? CDN kullanma nedenleri ve 5 avantajı yazısında anlattım.
Ⅲ. Sunucu içi önbellek
Sunucu içi önbellek, istek kaynak sunucuya ulaştıktan sonra WordPress'in sayfayı oluşturduğu sürece eklenen önbellektir. Nginx + Apache ile kurulmuş bir sunucu istekleri aşağıdaki sırayla işler; önceki adımda kopya bulunursa sonraki adımlar atlanır.
Nginx + Apache yapılandırmasını Cloudways'te ve ScalaHosting'de seçenek olarak seçebilirsiniz. Cloudways'te her uygulama için Hybrid stack (Nginx + Apache) ile Lightning stack (yalnızca Nginx) arasından birini seçersiniz; ScalaHosting'de ise SPanel'de Nginx'i Apache'nin önüne koyan ayarı açabilirsiniz.
| Önbellek | Sakladığı şey | Ne zaman saklanır |
|---|---|---|
| 1️⃣ Sayfa önbelleği | Hazır HTML sayfası | 🅑 ⑤ Yanıt verilirken WP Rocket dosyaya kaydeder |
| 2️⃣ OPcache | Derlenmiş PHP kodu (bayt kodu) | 🅑 ② Bir PHP dosyası ilk kez çalıştığında |
| 3️⃣ Nesne önbelleği | Sorgu sonuçları ve seçenekler gibi veri parçaları | 🅑 ③ WordPress verileri ilk kez aldığında |
1️⃣ Sayfa önbelleği
Sayfa önbelleğine tam sayfa önbelleği (full-page cache) da denir; sakladığı şey HTML olduğu için HTML önbelleği olarak da anılır. PHP'nin oluşturduğu web sayfasının tamamını statik bir HTML dosyası olarak saklar ve aynı sayfa istendiğinde PHP'yi çalıştırmadan o dosyayı gönderir. Yukarıdaki işlem sırasındaki 🅐 durumudur.
Saklandığı yer sunucu belleği (RAM) ya da disktir (HDD/SSD); bellek hızlıdır ama pahalı ve kapasitesi sınırlıdır, disk ise geniş kapasitelidir ama görece yavaştır.
| Tip | Örnek | Saklama ve yanıt biçimi |
|---|---|---|
| Önbellekleme eklentisi | WP Rocket · WP Super Cache · W3 Total Cache · Cache Enabler | WordPress sayfayı HTML dosyası olarak kaydeder, web sunucusu da o dosyayı gönderir. |
| Web sunucusu önbelleği | Nginx FastCGI önbelleği · LiteSpeed Cache | Web sunucusu PHP yanıtını kendisi saklar ve sonraki istekte gönderir. |
| Ters proxy önbelleği | Varnish | Web sunucusunun önüne konan bir önbellek sunucusu sayfayı saklayıp yanıt verir. |
Nginx + Apache yapılandırmasında nginx, WP Rocket'in oluşturduğu HTML dosyasını doğrudan okuyup gönderir ve yanıt başlığına [x-rocket-nginx-serving-file: HIT] eklenir. WP Rocket ile sayfa önbelleğini açma ve ayarlama adımlarını WP Rocket ayar rehberi yazısında anlattım.
2️⃣ OPcache
OPcache, önceden bayt koduna derlenmiş PHP kodunu bellekte saklar; böylece aynı dosya yeniden çalıştırılırken PHP ayrıştırıcısından geçmez. PHP 5.5'ten beri yerleşik olarak gelir; eskiden kullanılan APC ve XCache, PHP 7'yi desteklemediği için artık kullanılmaz. Yukarıdaki işlem sırasında 🅑 durumunun ② adımıdır.
| Tip | Durum | Açıklama |
|---|---|---|
| Zend OPcache | PHP 5.5'ten beri yerleşik | Bugün kullanılan standart opcode önbelleğidir; [opcache.enable=1] ile açılır. |
| OPcache JIT | PHP 8'den beri OPcache'in içinde | Bayt kodunu bir kez daha makine koduna çevirip çalıştırır; [opcache.jit] ile açılıp kapatılır. |
| APC | Geliştirme sona erdi | OPcache'ten önce kullanılan opcode önbelleğidir; veri önbelleği özelliği APCu ile sürdü. |
| XCache | Geliştirme sona erdi | PHP 7'yi desteklemez. |
| WinCache | Windows (IIS) sunucuları için | WordPress resmî belgelerinin OPcache ile birlikte andığı bir opcode önbelleğidir. |
OPcache, PHP ayarı [opcache.enable=1] ile açılır; PHP 8 ile gelen JIT ise [opcache.jit=disable] ile ayrıca kapatılabilir. Kurulum ve ayarlar Zend OPcache: kavramı, kurulumu ve ayarları yazısında anlatılıyor.
3️⃣ Nesne önbelleği
Nesne önbelleği, veritabanı sorgu sonuçlarını ya da hesaplanmış nesneleri Redis veya Memcached gibi bir bellek deposunda saklar. WordPress varsayılan olarak nesneleri yalnızca tek bir istek içinde hatırlar; sonuçların istek bittikten sonra da kalması için Redis gibi bir depo bağlamanız gerekir. Yukarıdaki işlem sırasında 🅑 durumunun ③ adımıdır.
| Tip | Tür | İstek bitince kalır mı? | Açıklama |
|---|---|---|---|
| WP_Object_Cache | WordPress varsayılanı | Hayır | Yalnızca tek bir istek içinde hatırlayan yerleşik önbellektir. |
| Redis | Nesne önbelleği | Evet | Ayrı bir bellek deposudur; Redis Object Cache eklentisinin drop-in dosyasıyla bağlanır. |
| Memcached | Nesne önbelleği | Evet | Ayrı bir bellek deposudur. |
| APCu | Nesne önbelleği | Evet (aynı sunucu içinde) | PHP'nin kullandığı paylaşılan bellekte saklar. |
| Dosya | Nesne önbelleği | Evet | Diskte dosya olarak saklar. |
| InnoDB tampon havuzu | Veritabanının kendi önbelleği · nesne önbelleği değil | Evet | MySQL ve MariaDB tablo verilerini ve dizinleri bellekte tutar. |
| Sorgu önbelleği | Veritabanının kendi önbelleği · nesne önbelleği değil | — | MySQL 8.0 sürümünde kaldırıldı; MariaDB'de hâlâ var ama varsayılan olarak kapalıdır. |
WordPress, Redis Object Cache eklentisinin eklediği drop-in dosyasıyla ([object-cache.php]) Redis'e bağlanır. Kurulum adımları WordPress Redis Cache kurulumu ve ayarları yazısında anlatılıyor.
🔢 SSS & önerilen içerikler









ℹ️ Satış ortaklığı bildirimi
Bu sitenin içeriklerinde satış ortaklığı bağlantıları bulunur. Bir ziyaretçi bu bağlantılar üzerinden ürün veya hizmet satın alırsa bu site satıcıdan komisyon alır. Bu süreçte alıcının ödediği tutar (kampanya indirimlerinde tutar düşer↓) artmaz. Yayımlanan fiyat, indirim ve stok bilgileri yazının yazıldığı zamana aittir ve gerçek durumdan farklı olabilir; bu yüzden satın almadan önce son bilgiyi satıcıdan kontrol etmenizi rica ederiz. Ürünler kendi ölçütlerimize göre seçilir ve değerlendirilir; komisyon alınıp alınmaması tanıtım sırasını veya değerlendirme içeriğini etkilemez.