Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Nginx ile Dinamik İçerik Önbellekleme: Uygulamanızı Yük Altında Uçurun 🚀

pixero

Üye
Katılım
14 Mart 2026
Mesajlar
8
Nginx ile Dinamik İçerik Önbellekleme: Uygulamanızı Yük Altında Uçurun 🚀

Selam sistemciler! 🐧 Bugün, özellikle WordPress, Laravel veya benzeri veritabanı bağımlı uygulamalar çalıştıranların can simidi olacak bir konuya dalıyoruz: Nginx ile Dinamik İçerik Önbellekleme.

Statik dosyaları (CSS, JS, resimler) hızlandırmak kolay. Peki ya her istekte PHP'yi çalıştırıp MySQL'e sorgu gönderen dinamik sayfalar? İşte burada FastCGI Cache devreye giriyor. Bu yöntemle, bir kullanıcı için oluşturulan sayfa, belirli bir süreliğine önbelleğe alınır ve sonraki kullanıcılara doğrudan bu önbellekten sunulur. Veritabanı ve PHP yükü inanılmaz azalır. 🖥️⚡

Neden FastCGI Cache?
  • CPU ve RAM Tüketiminde Dev Düşüş: Her istek için PHP-FPM işlemi fork'lamazsınız.
  • Yanıt Sürelerinde Roket Etkisi: Önbellekten sunulan sayfalar milisaniyeler içinde teslim edilir.
  • Trafik Patlamalarına Dayanıklılık: Sunucunuz, ani ziyaretçi artışlarında (Reddit'te paylaşılma, sosyal medya etkisi) çok daha rahat göğüsler.
  • Basit ve Etkili: Nginx'in gücünü kullanır, ekstra bir uygulama (Redis/Memcached gibi) gerektirmez (tabii onları da seviyoruz!).

Adım Adım Kurulum ve Yapılandırma

1. Önbellek Dizini Oluşturma: İlk iş, önbellek dosyalarımızın saklanacağı bir dizin oluşturmak.
Bash:
sudo mkdir -p /var/cache/nginx
sudo chown www-data:www-data /var/cache/nginx

2. Ana Nginx Yapılandırmasına Cache Parametrelerini Eklemek: `nginx.conf` veya `/etc/nginx/conf.d/cache.conf` gibi bir dosyada genel önbellek ayarlarını tanımlayalım.
NGINX:
# /etc/nginx/conf.d/fastcgi_cache.conf
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=MYAPP:100m inactive=60m use_temp_path=off;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_use_stale error timeout updating http_500 http_503;
fastcgi_cache_background_update on;
fastcgi_cache_lock on;
Parametre Açıklamaları:
  • fastcgi_cache_path: Önbellek yolunu, dizin yapısını (`levels`), bellek bölgesi adını (`keys_zone=MYAPP:100m` - 100MB RAM) ve önbellek dosyalarının ne kadar süre kullanılmazsa silineceğini (`inactive=60m`) belirler.
  • fastcgi_cache_key: Her sayfanın önbellekteki benzersiz anahtarını oluşturma şeması.
  • fastcgi_cache_use_stale: Arka uç (PHP) hata verdiğinde bile eski (stale) önbelleği kullanıcıya sunar. Bu, uygulamanızın tamamen çökmesini engelleyen harika bir güvenlik ağıdır! 🛡️
  • fastcgi_cache_lock: Aynı anda aynı sayfaya gelen birden çok istekten sadece birinin PHP'ye ulaşmasını sağlar, diğerleri önbellek oluşana kadar bekler. Kaynak kullanımını daha da iyileştirir.

3. Site Konfigürasyonunuza Cache Kurallarını Eklemek: `/etc/nginx/sites-available/siteniz` dosyanızda, `location ~ \.php$` bloğunuzu güncelleyin.
NGINX:
server {
    ...
    location ~ \.php$ {
        # ... mevcut fastcgi_pass, fastcgi_param ayarlarınız aynen kalır ...

        # Önbellek Ayarları
        set $skip_cache 0;

        # POST isteklerini ve oturumu olan kullanıcıları önbellekleme (isteğe bağlı)
        if ($request_method = POST) {
            set $skip_cache 1;
        }
        if ($cookie_wordpress_logged_in) {
            set $skip_cache 1;
        }
        if ($cookie_ci_session) {
            set $skip_cache 1;
        }

        fastcgi_cache MYAPP;
        fastcgi_cache_valid 200 301 302 10m; # Başarılı sayfaları 10 dakika önbellekle
        fastcgi_cache_valid 404 1m; # 404 sayfalarını 1 dakika önbellekle
        fastcgi_cache_bypass $skip_cache;
        fastcgi_no_cache $skip_cache;

        # Önbellek durumunu bir HTTP başlığı olarak gönder (debug için)
        add_header X-FastCGI-Cache $upstream_cache_status;
    }
}

4. Yapılandırmayı Test Edip Nginx'i Yeniden Başlatma:
Bash:
sudo nginx -t
sudo systemctl reload nginx # veya restart

Test ve Debug 🐛
Kurulumun çalıştığını nasıl anlarsınız?
  • Tarayıcınızın Geliştirici Araçları'nı (F12) açın, "Network" sekmesine gidin ve bir sayfayı yenileyin. Yanıt başlıklarında X-FastCGI-Cache: HIT gördüğünüz an, kalbiniz hızlanacak! "MISS" ilk istek, "BYPASS" önbelleklenmeyen istek içindir.
  • Önbellek dizinini kontrol edin:
    Bash:
    sudo ls -la /var/cache/nginx
    Dosyaların oluştuğunu göreceksiniz.

Önemli Uyarılar ve İpuçları ⚠️
  • Oturum Açmış Kullanıcılar: Yukarıdaki örnekte olduğu gibi, `wordpress_logged_in` veya `ci_session` gibi çerezleri kontrol ederek oturum açmış kullanıcılara önbelleklenmiş sayfa göstermeyin. Kişiselleştirilmiş içerik bozulur.
  • Önbelleği Temizleme: Bir içeriği güncellediğinizde önbelleğin temizlenmesi gerekir. Bunun için Nginx'in `fastcgi_cache_purge` modülünü derlemeniz veya önbellek dizinini manuel silmeniz gerekebilir.
  • Disk Alanı: `/var/cache/nginx` dizininin bulunduğu disk bölümünün yeterli alana sahip olduğundan emin olun.
  • Test, Test, Test: Canlı sunucunuza uygulamadan önce bir staging ortamında mutlaka test edin. Tüm sayfalarınızın doğru çalıştığından emin olun.

İşte bu kadar! Bu yapılandırma, özellikle yoğun içerikli bloglar, haber siteleri veya katalog sayfaları için inanılmaz bir performans artışı sağlayacaktır. 🌐

Peki ya siz? Dinamik önbellekleme için hangi yöntemleri kullanıyorsunuz? Varnish, Redis gibi çözümlerle mi çalışıyorsunuz, yoksa Nginx'in bu dahili gücü sizin için yeterli mi? Tecrübelerinizi ve sorularınızı yorumlarda paylaşın, birlikte tartışalım!
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri