PerformansSon Güncelleme:

Linux Sunucu Hızlandırma: Nginx, PHP-FPM ve OPcache Ayarları

Hazır mısınız?

VDS Sunucu hizmetimizi hemen keşfedin.

VDS Paketlerini İncele

Önce Ölçün: Ayar Yapmadan Önceki Değerleri Kaydedin

Performans ayarı, ölçmeden yapılırsa tahmine dönüşür. Değişikliklerden önce sayfanızın ilk bayt süresini (TTFB) not alın:

curl -o /dev/null -s -w "TTFB: %{time_starttransfer}s  Toplam: %{time_total}s\n" https://alanadiniz.com/

Komutu birkaç kez çalıştırıp ortalamasını alın. Her adımdan sonra aynı ölçümü tekrarlayarak hangi ayarın ne kadar kazandırdığını görebilirsiniz.

PHP-FPM Süreç Sayısını RAM'e Göre Hesaplayın

En sık yapılan hata, pm.max_children değerini sunucunun belleğinden bağımsız belirlemektir. Önce bir PHP sürecinin ortalama ne kadar bellek kullandığını bulun (örnek PHP 8.3 içindir):

ps --no-headers -o rss -C php-fpm8.3 | awk '{s+=$1} END {print s/NR/1024 " MB"}'

Formül basittir: pm.max_children = PHP'ye ayırabileceğiniz RAM ÷ ortalama süreç boyutu. Örneğin 8 GB RAM'li bir VDS'te veritabanı ve işletim sistemi için 3 GB ayırıp PHP'ye 5 GB bırakırsanız ve süreç başına 80 MB ölçtüyseniz yaklaşık 60 süreç tanımlayabilirsiniz.

# /etc/php/8.3/fpm/pool.d/www.conf
pm = dynamic
pm.max_children = 60
pm.start_servers = 12
pm.min_spare_servers = 8
pm.max_spare_servers = 20
pm.max_requests = 500

OPcache'i Etkinleştirin ve Boyutlandırın

OPcache, derlenmiş PHP kodunu bellekte tutarak her istekte yeniden derlemeyi önler. Varsayılan bellek değeri büyük WordPress veya Laravel projeleri için genellikle yetersizdir:

# /etc/php/8.3/fpm/conf.d/10-opcache.ini
opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=20000
opcache.validate_timestamps=1
opcache.revalidate_freq=60
sudo systemctl restart php8.3-fpm

Nginx: Sıkıştırma, Tarayıcı Önbelleği ve FastCGI Microcaching

Statik dosyalar için uzun tarayıcı önbelleği ve metin dosyaları için gzip sıkıştırma, sunucuya gelen istek sayısını ve aktarılan veriyi azaltır:

# server { ... } bloğu içinde
gzip on;
gzip_types text/css application/javascript application/json image/svg+xml;

location ~* \.(css|js|webp|avif|png|jpg|svg|woff2)$ {
    expires 30d;
    add_header Cache-Control "public, immutable";
}

Dinamik sayfalarda birkaç saniyelik FastCGI önbelleği (microcaching), ani trafik artışlarında PHP'nin yükünü önemli ölçüde azaltır. Giriş yapmış kullanıcılar ve sepet sayfaları önbellekten muaf tutulmalıdır:

# http { ... } bloğu içinde
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=PHPCACHE:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";

# server { ... } bloğu içinde
set $skip_cache 0;
if ($request_method = POST) { set $skip_cache 1; }
if ($http_cookie ~* "wordpress_logged_in|woocommerce_items_in_cart") { set $skip_cache 1; }

# location ~ \.php$ { ... } bloğu içinde
fastcgi_cache PHPCACHE;
fastcgi_cache_valid 200 301 302 10s;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
sudo nginx -t && sudo systemctl reload nginx

MariaDB: InnoDB Buffer Pool ve Yavaş Sorgu Günlüğü

Veritabanının sık kullanılan verileri bellekte tutabilmesi için innodb_buffer_pool_size değeri kritik önemdedir. Web ve veritabanı aynı VDS'teyse RAM'in yaklaşık %25-40'ı, yalnızca veritabanı çalıştıran sunucularda %50-70'i iyi bir başlangıçtır:

# /etc/mysql/mariadb.conf.d/50-server.cnf  ([mysqld] bölümü)
innodb_buffer_pool_size = 2G
slow_query_log = 1
slow_query_log_file = /var/log/mysql/yavas-sorgular.log
long_query_time = 1

Yavaş sorgu günlüğü, 1 saniyeden uzun süren sorguları kaydeder. Bu sorgulara uygun indeks eklemek çoğu zaman donanım yükseltmesinden daha fazla hız kazandırır.

Donanım Tarafı: Ne Zaman Paket Yükseltmelisiniz?

  • Ayarlardan sonra CPU kullanımı yoğun saatlerde sürekli %80'in üzerindeyse
  • Sunucu swap kullanmaya başladıysa (free -h çıktısında Swap satırı doluyorsa)
  • Disk bekleme süresi (iowait) yüksekse ve veritabanı büyüdüyse

Bu durumlarda VDS paketinizi IP adresiniz değişmeden bir üst pakete yükseltebilirsiniz. WordPress siteleri için sunucu yönetimiyle uğraşmak istemiyorsanız LiteSpeed ve Redis hazır gelen WordPress hosting paketleri de bir seçenektir.

Sıkça Sorulan Sorular

OPcache ayarından sonra kod değişikliklerim neden hemen görünmüyor?

opcache.revalidate_freq=60 değeri, dosyaların en fazla 60 saniyede bir kontrol edilmesini sağlar. Değişikliği hemen görmek için php8.3-fpm servisini yeniden başlatabilir veya geliştirme ortamında bu değeri 0 yapabilirsiniz.

FastCGI önbelleği WooCommerce sepetini bozar mı?

Rehberdeki gibi woocommerce_items_in_cart ve wordpress_logged_in çerezleri olan istekler önbellekten muaf tutulursa bozmaz. Sepet, ödeme ve hesabım sayfalarını ayrıca URL bazlı olarak da hariç tutmanız önerilir.

İlgili İçerikler