Nginx ve Sunucu Taraflı Önbellekleme
Nginx, yüksek performanslı bir web sunucusu olarak, dinamik ve statik içeriklerin hızlı bir biçimde sunulmasını sağlayan bir dizi özellik sunar. Sunucu taraflı önbellekleme, kullanıcıların taleplerine daha hızlı yanıt verilmesi için önemli bir yöntemdir. İki ana önbellekleme yöntemi bulunmaktadır: `proxy_cache` ve `fastcgi_cache`. Bu yöntemlerin her biri farklı senaryolar için optimize edilmiştir.
Proxy Cache
`proxy_cache`, Nginx’in bir ters proxy olarak görev yaptığı durumlarda kullanılır. Diğer bir deyişle, arka planda bir başka sunucudan içerik alırken, önbelleğe alma işlemi gerçekleştirir. Özellikle API çağrıları veya harici içerikler için idealdir.
Yapılandırma Adımları
1. Önbellek Dizini Tanımlama: Sunucuda önbellek dosyalarının saklanacağı dizin tanımlanmalıdır. Bu dizin, `proxy_cache_path` direktifi ile belirlenir.
“`
proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
“`
– `levels`: Önbellek dosyalarının dizin yapısını belirler.
– `keys_zone`: Önbelleğin yönetileceği alanın ismi ve büyüklüğü.
– `max_size`: Önbelleğin maksimum boyutu.
– `inactive`: Önbelleğe alınmış içeriklerin ne kadar süreyle kullanılmaması durumunda silineceği süre.
– `use_temp_path`: Geçici dizin kullanılıp kullanılmayacağını belirtir.
2. Yapılandırma Dosyasında Proxy Ayarları: İlgili sunucu bloğuna veya location bloğuna aşağıdaki direktifler eklenmelidir.
“`
location /api/ {
proxy_pass http://backend_server;
proxy_cache my_cache;
proxy_cache_valid 200 1h;
proxy_cache_valid 404 1m;
add_header X-Cache-Status $upstream_cache_status;
}
“`
– `proxy_pass`: İsteğin yönlendirileceği arka sunucu.
– `proxy_cache`: Kullanılacak önbellek alanı.
– `proxy_cache_valid`: Önbelleğe alınacak içeriklerin geçerlilik süresi.
– `add_header`: İsteğin önbellekten gelip gelmediğini kontrol etmek için kullanılır.
FastCGI Cache
`fastcgi_cache`, dinamik içerikler için kullanılan FastCGI uygulamalarının yanıtlarını önbelleğe almak için kullanılır. Genellikle PHP uygulamalarıyla birlikte kullanılır.
Yapılandırma Adımları
1. Önbellek Dizini Tanımlama: FastCGI önbellek dizini, `fastcgi_cache_path` direktifi ile tanımlanır.
“`
fastcgi_cache_path /path/to/fastcgi_cache levels=1:2 keys_zone=fastcgi_cache:10m max_size=1g inactive=60m use_temp_path=off;
“`
2. Yapılandırma Dosyasında FastCGI Ayarları: Sunucu bloğunda veya location bloklarında FastCGI ayarları yapılmalıdır.
“`
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
include fastcgi_params;
fastcgi_cache fastcgi_cache;
fastcgi_cache_valid 200 30s;
fastcgi_cache_valid 404 1m;
add_header X-Cache-Status $upstream_cache_status;
}
“`
– `fastcgi_pass`: FastCGI uygulamasının noktası.
– `include fastcgi_params`: FastCGI ile ilgili parametrelerin dahil edilmesini sağlar.
– `fastcgi_cache`: Kullanılacak FastCGI önbelleği.
– `fastcgi_cache_valid`: İçeriğin geçerlilik süresi.
– `add_header`: Önbellek statüsünü denetlemek için kullanılır.
Önbellek Temizleme
Zaman içerisinde önbellek büyüyebilir veya içerikler güncellenebilir. Nginx, belirli komutlar ile önbelleği temizleme işlemi yapılmasına olanak tanır.
“`
find /path/to/cache -type f -delete
“`
Bu komut, belirli bir dizindeki tüm önbellek dosyalarını siler. Alternatif olarak, Nginx’in sağladığı `cache purging` özelliği ile belirli içerikler için önbelleği temizlemek mümkündür. Bu özellik, proxy veya FastCGI yapılandırmasında eklentilerle desteklenebilir.
Performans ve İzleme
Nginx’i yapılandırdıktan sonra, önbelleklemenin performansı dikkatli bir şekilde izlenmelidir. `X-Cache-Status` başlığı ile, yanıtların önbellekten gelip gelmediği, önbelleğe alındığı veya güncellendiği gibi bilgiler gözlemlenebilir. Ayrıca, Nginx’in hata günlükleri ve erişim günlükleri de, önbellekleme mekanizmasının etkinliğinin değerlendirilmesi açısından faydalıdır.
Nginx sunucu taraflı önbellekleme ile performans ve kullanıcı deneyimi büyük ölçüde iyileştirilir. Ancak, her iki yöntem için de doğru yapılandırmadan emin olunması gerekir. Bu yapılandırmalar, sunucu kaynaklarının verimli kullanımı ile hızlı bir içerik sunumu sağlar.