Nginx FastCGI Cache ile Mikro Saniye Yanıt Süreleri
Dinamik PHP uygulamalarının çıktısını statik dosyalara çevirerek devasa trafik yüklerini kaldıran Nginx FastCGI önbellekleme mekanizması.
Genel Bakış
Nginx, yüksek performanslı bir web sunucusudur ve PHP-FPM gibi uygulama sunucularıyla FastCGI protokolü üzerinden iletişim kurar. Nginx'in yerleşik olarak sunduğu FastCGI Cache mekanizması, dinamik kodların ürettiği çıktıları RAM veya SSD üzerinde statik HTML dosyaları olarak saklayarak uygulama sunucusunun yükünü sıfıra indirir.
Sorun
WordPress veya Laravel gibi PHP tabanlı dinamik sitelerde, bir kullanıcı anasayfayı her ziyaret ettiğinde şu süreç işler: Nginx isteği alır -> PHP-FPM'e iletir -> PHP kodları yorumlar -> Veritabanına (MySQL) 10 farklı sorgu atar -> Gelen veriyi birleştirip HTML üretir -> Nginx'e verir. Bu süreç, tek bir istek için 500-1000 milisaniye (ms) sürebilir. Eğer sitenize aynı saniyede 500 kişi girerse, bu işlemler 500 kez tekrarlanır ve veritabanı kilitlenerek sunucu "502 Bad Gateway" hatası verir.
Çözüm: Nginx FastCGI Cache Entegrasyonu
Nginx, üretilen bu HTML dosyasını belirlediğiniz bir süre boyunca (örn. 10 dakika) kendi belleğinde (RAM/SSD) tutar. Diğer 499 ziyaretçi için PHP veya veritabanı hiçbir işlem yapmaz; Nginx statik HTML'i anında gönderir.
Örnek Nginx vhost Konfigürasyonu:
fastcgi_cache_path /var/run/nginx-cache levels=1:2 keys_zone=WORDPRESS:100m inactive=60m;
location ~ .php$ {
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_cache WORDPRESS;
fastcgi_cache_valid 200 301 302 60m;
add_header X-Cache $upstream_cache_status; # HIT veya MISS bilgisini döner
}
Teknik Detaylar
Cache mekanizmasını kullanırken en çok dikkat edilmesi gereken konu, kullanıcıya özel sayfaların (Admin paneli, e-ticaret sepeti, giriş yapmış üyeler) yanlışlıkla önbelleğe alınmasıdır. Bu tür sayfalar önbelleğe alınırsa, bir müşterinin sepetini başka bir müşteri görmeye başlar. Nginx'te fastcgi_cache_bypass yönergesi kullanılarak, eğer tarayıcıda bir oturum çerezi (session cookie) varsa isteğin doğrudan PHP'ye yönlendirilmesi sağlanır. Dinamik içerikler değiştiğinde (örn. yeni bir haber yayınlandığında) cache'in manuel veya eklentilerle otomatik temizlenmesi (Cache Purge) gerekir.
Sonuç
Redis veya Memcached gibi nesne önbellekleme (Object Caching) araçları sadece veritabanı sorgularını hızlandırırken, Nginx FastCGI Cache tüm PHP işleme sürecini atlatır. Doğru yapılandırılmış bir Nginx Cache, 2 GB RAM'li ucuz bir sanal sunucunun bile günlük yüz binlerce anlık hiti çökmeden kaldırmasını sağlar.