Merhaba arkadaşlar, bugün sizlere Nginx üzerinde, LiteSpeed Cache'in sağladığına benzer güçlü bir önbellekleme (cache) katmanı oluşturmanın yollarından bahsedeceğim. Özellikle WordPress veya benzeri dinamik sitelerde, sayfa önbelleğinin hız ve performansa etkisi çok büyük. LiteSpeed Web Server (LSWS) ve LSCache modülü harika bir çözüm, ancak Nginx kullanıyorsanız ve sunucunuzu değiştirmek istemiyorsanız, üçüncü parti modüllerle benzer bir performans elde edebilirsiniz. Bu rehberde, bu modüllerden nasıl faydalanabileceğimizi adım adım inceleyeceğiz.
Neden Üçüncü Parti Cache Modülü?</B]
Nginx'in kendi FastCGI Cache'i güçlüdür, ancak LiteSpeed Cache gibi bazı gelişmiş özellikleri (örneğin, belirli bir kullanıcı durumuna göre önbelleği atlama/purge etme) doğrudan desteklemez. Bu noktada, ngx_cache_purge (cache temizleme) veya daha kapsamlı ngx_http_redis modülleri devreye giriyor. Benim sunucularda genelde Redis ile birlikte kullanmayı tercih ettiğim bir yapı var, çünkü önbellek temizleme işlemleri inanılmaz hızlı ve verimli oluyor.
Temel Kurulum ve Modül Entegrasyonu
Öncelikle, Nginx'i bu modüllerle birlikte derlememiz gerekiyor. Mevcut Nginx'inizi kaldırmak istemiyorsanız, dinamik modül (dynamic module) olarak da ekleyebilirsiniz. Ben kaynaktan derlemeyi daha kontrollü buluyorum. Modül kaynak kodlarını indirelim.
Nginx'i yeniden derlemeden önce, mevcut yapılandırma argümanlarınızı öğrenmek çok önemli. Şu ayara çok dikkat etmelisiniz:
Çıktıdaki `--with-...` parametrelerini alıp, yeni derleme komutunuza ekleyin. Ardından, Nginx'i modüllerle birlikte derleyelim. Örnek bir derleme komutu:
Nginx Konfigürasyonu (nginx.conf ve Site Config)
Modül kurulduktan sonra, asıl sihir konfigürasyonda başlıyor. Öncelikle /etc/nginx/nginx.conf dosyasının `http` bloğu içinde, önbellek bölgelerimizi tanımlayalım. Bu, FastCGI Cache için bir örnek:
Şimdi, site özel konfigürasyon dosyanızda (örn: /etc/nginx/sites-available/siteniz.com), cache kurallarını ve purge (temizleme) endpoint'ini ekleyelim.
Dikkat Edilmesi Gerekenler ve Optimizasyon
1. /purge lokasyonu çok kritiktir. Sadece güvendiğiniz IP adreslerine (sunucunuz, localhost veya yönetim paneliniz) izin verin. Aksi takdirde, herkes önbelleğinizi temizleyebilir!
2. `fastcgi_cache_path` içindeki `max_size` değerini disk alanınıza göre ayarlayın. 1GB iyi bir başlangıç noktasıdır.
3. `add_header X-Fastcgi-Cache` satırı, tarayıcıdan istek yapıldığında sayfanın cache'ten mi yoksa dinamik olarak mı geldiğini anlamanızı sağlar. Debug için açık bırakıp, production'da kapatabilirsiniz.
4. Cache sürelerini (`fastcgi_cache_valid`) sitenizin güncellik sıklığına göre ayarlayın. Haber siteleri için daha kısa, kurumsal siteler için daha uzun tutulabilir.
5. Nginx'i her yeniden yapılandırdıktan sonra mutlaka test edin: `nginx -t` ve ardından `systemctl reload nginx`.
Sonuç ve Performans
Bu konfigürasyonu doğru bir şekilde uyguladığınızda, TTFB (Time To First Byte) sürelerinizde ciddi bir düşüş, sunucu yükünüzde ise büyük bir rahatlama göreceksiniz. LiteSpeed Cache kadar otomatize ve yönetimi kolay olmayabilir, ancak performans olarak ona çok yaklaşabilir, hatta bazı senaryolarda geçebilirsiniz. En büyük avantajı, mevcut Nginx altyapınızı değiştirmenize gerek kalmaması.
Siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? Farklı kullandığınız modüller veya optimizasyon ipuçlarınız var mı? Takıldığınız bir nokta olursa aşağıya yazmaktan çekinmeyin, elimden geldiğince yardımcı olmaya çalışırım. Herkese sorunsuz ve hızlı sunucular dilerim!
Nginx'in kendi FastCGI Cache'i güçlüdür, ancak LiteSpeed Cache gibi bazı gelişmiş özellikleri (örneğin, belirli bir kullanıcı durumuna göre önbelleği atlama/purge etme) doğrudan desteklemez. Bu noktada, ngx_cache_purge (cache temizleme) veya daha kapsamlı ngx_http_redis modülleri devreye giriyor. Benim sunucularda genelde Redis ile birlikte kullanmayı tercih ettiğim bir yapı var, çünkü önbellek temizleme işlemleri inanılmaz hızlı ve verimli oluyor.
Öncelikle, Nginx'i bu modüllerle birlikte derlememiz gerekiyor. Mevcut Nginx'inizi kaldırmak istemiyorsanız, dinamik modül (dynamic module) olarak da ekleyebilirsiniz. Ben kaynaktan derlemeyi daha kontrollü buluyorum. Modül kaynak kodlarını indirelim.
Bash:
cd /usr/src
git clone https://github.com/nginx-modules/ngx_cache_purge.git
git clone https://github.com/redis/redis.git # Redis sunucusu için
# veya Redis modülü için: git clone https://github.com/onnimonni/nginx-redis-module.git # (Örnek, kullanacağınız modüle göre değişir)
Nginx'i yeniden derlemeden önce, mevcut yapılandırma argümanlarınızı öğrenmek çok önemli. Şu ayara çok dikkat etmelisiniz:
Bash:
nginx -V 2>&1 | grep arguments
Çıktıdaki `--with-...` parametrelerini alıp, yeni derleme komutunuza ekleyin. Ardından, Nginx'i modüllerle birlikte derleyelim. Örnek bir derleme komutu:
Bash:
./configure [MEVCUT_ARGÜMANLARINIZ] --add-module=/usr/src/ngx_cache_purge --add-module=/usr/src/nginx-redis-module
make
make install
Modül kurulduktan sonra, asıl sihir konfigürasyonda başlıyor. Öncelikle /etc/nginx/nginx.conf dosyasının `http` bloğu içinde, önbellek bölgelerimizi tanımlayalım. Bu, FastCGI Cache için bir örnek:
NGINX:
http {
...
# FastCGI Cache için paylaşımlı bellek bölgesi
fastcgi_cache_path /var/run/nginx-cache levels=1:2 keys_zone=WORDPRESS:100m inactive=60m max_size=1g use_temp_path=off;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_use_stale error timeout updating invalid_header http_500 http_503;
fastcgi_cache_valid 200 301 302 60m; # 200 ve yönlendirme kodları 60 dakika cache'lensin
fastcgi_cache_valid 404 1m; # 404 hataları 1 dakika cache'lensin
# Redis için upstream tanımı (Eğer Redis modülü kullanıyorsanız)
upstream redis_backend {
server 127.0.0.1:6379;
keepalive 1024;
}
...
}
Şimdi, site özel konfigürasyon dosyanızda (örn: /etc/nginx/sites-available/siteniz.com), cache kurallarını ve purge (temizleme) endpoint'ini ekleyelim.
NGINX:
server {
listen 80;
server_name siteniz.com www.siteniz.com;
root /var/www/siteniz.com;
index index.php index.html index.htm;
# Cache bypass için cookie kontrolü (Örn: giriş yapan kullanıcılar cache'lenmez)
set $skip_cache 0;
if ($http_cookie ~ "wordpress_logged_in_|comment_author|wp-postpass_|woocommerce_items_in_cart") {
set $skip_cache 1;
}
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
# FASTCGI CACHE AYARLARI
fastcgi_cache WORDPRESS;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
fastcgi_cache_methods GET HEAD;
add_header X-Fastcgi-Cache $upstream_cache_status; # Cache durumunu header'da göster (opsiyonel, debug için)
}
# ÖNBELLEK TEMİZLEME (PURGE) ENDPOINT'I
# BU BÖLÜM ÇOK ÖNEMLİDİR, GÜVENLİK İÇİN IP KISITLAMASI YAPIN!
location ~ /purge(/.) {
allow 127.0.0.1;
allow YOUR_SERVER_IP; # Kendi sunucu IP'nizi yazın
deny all;
fastcgi_cache_purge WORDPRESS "$scheme$request_method$host$1";
}
# Redis Cache için örnek location (Eğer Redis modülünüz varsa)
# location /redis-cache {
# set $redis_key "$uri";
# redis_pass redis_backend;
# }
}
1. /purge lokasyonu çok kritiktir. Sadece güvendiğiniz IP adreslerine (sunucunuz, localhost veya yönetim paneliniz) izin verin. Aksi takdirde, herkes önbelleğinizi temizleyebilir!
2. `fastcgi_cache_path` içindeki `max_size` değerini disk alanınıza göre ayarlayın. 1GB iyi bir başlangıç noktasıdır.
3. `add_header X-Fastcgi-Cache` satırı, tarayıcıdan istek yapıldığında sayfanın cache'ten mi yoksa dinamik olarak mı geldiğini anlamanızı sağlar. Debug için açık bırakıp, production'da kapatabilirsiniz.
4. Cache sürelerini (`fastcgi_cache_valid`) sitenizin güncellik sıklığına göre ayarlayın. Haber siteleri için daha kısa, kurumsal siteler için daha uzun tutulabilir.
5. Nginx'i her yeniden yapılandırdıktan sonra mutlaka test edin: `nginx -t` ve ardından `systemctl reload nginx`.
Bu konfigürasyonu doğru bir şekilde uyguladığınızda, TTFB (Time To First Byte) sürelerinizde ciddi bir düşüş, sunucu yükünüzde ise büyük bir rahatlama göreceksiniz. LiteSpeed Cache kadar otomatize ve yönetimi kolay olmayabilir, ancak performans olarak ona çok yaklaşabilir, hatta bazı senaryolarda geçebilirsiniz. En büyük avantajı, mevcut Nginx altyapınızı değiştirmenize gerek kalmaması.
Siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? Farklı kullandığınız modüller veya optimizasyon ipuçlarınız var mı? Takıldığınız bir nokta olursa aşağıya yazmaktan çekinmeyin, elimden geldiğince yardımcı olmaya çalışırım. Herkese sorunsuz ve hızlı sunucular dilerim!