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.

Hestiacp'de Site Hızlandırma — Nginx Önbellekleme, Php-Fpm ve Redis Ayarları

Katılım
10 Ağustos 2026
Mesajlar
45
Rating - 0%
0   0   0
Rozetler
Tasarımcı Tasarımcı
Geliştirici Geliştirici
Yönetici Yönetici
Sistem Yöneticisi Sistem Yöneticisi
Seride şu ana kadar HestiaCP'yi kurduk, cPanel'den site taşıdık ve otomatik uzak yedekleme kurduk. Sıra sunucudan gerçekten performans almaya geldi.

HestiaCP varsayılan ayarlarıyla çalışır ama hiçbir şekilde optimize gelmez. Varsayılan kurulumda Nginx sadece Apache'ye proxy yapar, PHP-FPM işlem sayısı düşük tutulur, önbellekleme kapalıdır. Bu rehberdeki ayarları uyguladığında aynı donanımda sitenin belirgin şekilde hızlanır ve çok daha fazla eşzamanlı ziyaretçi kaldırır.

Örneklerde kullanıcı adı olarak oblifex kullanıyorum, sen kendi kullanıcı adını yazacaksın.

Uyarıdan başlayalım: Bu ayarlara girmeden önce sunucunun yedeğini al. Yanlış bir PHP-FPM değeri sunucunun belleğini bitirip siteni tamamen kapatabilir.



1. Önce ölç, sonra değiştir

Rastgele ayar kurcalamak zaman kaybıdır. Önce darboğazın nerede olduğunu bul.

Sunucunun anlık yükünü gör:

Kod:
apt install -y htop
htop

Bellek durumu:

Kod:
free -h

Disk okuma/yazma darboğazı var mı:

Kod:
apt install -y sysstat
iostat -x 2 5

En çok kaynak yiyen süreçler:

Kod:
ps aux --sort=-%mem | head -10

Bu çıktılara göre yön belirle:
  • CPU sürekli %100 ise → PHP kodu ya da veritabanı sorguları sorunlu, önbellekleme şart
  • Bellek doluysa → PHP-FPM işlem sayısı fazla ya da MySQL ayarları şişkin
  • Disk beklemesi (wa) yüksekse → önbellekleme ve Redis şart
  • Her şey boşta ama site yavaşsa → sorun sunucuda değil, kodda veya harici isteklerde



2. Nginx + Apache mimarisini anlamak

HestiaCP varsayılan olarak iki web sunucusunu birlikte çalıştırır:

  • Nginx önde durur, statik dosyaları (resim, CSS, js) doğrudan servis eder
  • Apache arkada durur, PHP isteklerini işler

Bu yapı .htaccess desteği verdiği için uyumluluğu yüksektir ama iki kat bellek tüketir. Eğer sitende .htaccess bağımlılığı yoksa Apache'yi tamamen devre dışı bırakıp sadece Nginx + PHP-FPM kullanmak en büyük performans kazancını sağlar.

Apache'siz moda geçmek için domainin backend template'ini değiştir:

Kod:
v-change-web-domain-proxy-tpl oblifex oblifex.com wordpress
v-change-web-domain-backend-tpl oblifex oblifex.com PHP-8_3

Sunucuda hiç Apache kullanmayacaksan tamamen kapatabilirsin, ciddi bellek kazanırsın:

Kod:
systemctl stop apache2
systemctl disable apache2
v-change-sys-web-backend nginx

Dikkat: Bu geri dönüşü zahmetli bir işlemdir. Üzerinde eski, .htaccess bağımlı yazılımlar barındıran bir sunucuda yapma.



3. Nginx FastCGI önbelleklemesi

Bu, tek başına en büyük hız artışını sağlayan ayardır. PHP'nin ürettiği HTML çıktısını bellekte tutar; aynı sayfa ikinci kez istendiğinde PHP hiç çalışmaz, veritabanına hiç gidilmez.

3.1 Önbellek alanını tanımla

Kod:
nano /etc/nginx/conf.d/fastcgi_cache.conf

İçine şunu yaz:

Kod:
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=OBLIFEX:100m inactive=60m max_size=1g;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_use_stale error timeout invalid_header updating http_500 http_503;
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
add_header X-Cache-Status $upstream_cache_status;

Önbellek dizinini oluştur:

Kod:
mkdir -p /var/cache/nginx
chown -R www-data:www-data /var/cache/nginx

3.2 Domaine özel kural ekle

HestiaCP'de domaine özel Nginx ayarları .conf uzantılı ek dosyalara yazılır; böylece panel şablonu yeniden oluşturduğunda ayarların silinmez.

Kod:
nano /home/oblifex/conf/web/oblifex.com/nginx.conf_cache

İçerik:

Kod:
set $skip_cache 0;

if ($request_method = POST) { set $skip_cache 1; }
if ($query_string != "") { set $skip_cache 1; }
if ($request_uri ~* "/admin.php|/wp-admin/|/login|/cart|/checkout|/sepet") { set $skip_cache 1; }
if ($http_cookie ~* "xf_user|wordpress_logged_in|woocommerce_items_in_cart") { set $skip_cache 1; }

location ~ \.php$ {
    fastcgi_cache OBLIFEX;
    fastcgi_cache_valid 200 301 302 60m;
    fastcgi_cache_bypass $skip_cache;
    fastcgi_no_cache $skip_cache;
}

Buradaki skip_cache kuralları hayati önemde. Giriş yapmış kullanıcılara ve sepet/ödeme sayfalarına önbellek uygulanırsa bir kullanıcının sayfası başka kullanıcıya gösterilir. Kullandığın yazılımın oturum çerezini bu listeye eklediğinden emin ol:

YazılımOturum çerezi
XenForoxf_user, xf_session
WordPresswordpress_logged_in, comment_author
WooCommercewoocommerce_items_in_cart, wp_woocommerce_session
OpenCartOCSESSID
Laravellaravel_session

Ayarları uygula:

Kod:
nginx -t
systemctl reload nginx

3.3 Önbelleğin çalıştığını doğrula

Kod:
curl -I https://oblifex.com

Çıktıda X-Cache-Status: MISS görürsün. Komutu bir kez daha çalıştır; artık HIT yazmalı. HIT Gördüğün an o sayfa artık PHP'yi hiç çalıştırmıyor demektir.

Önbelleği temizlemek için:

Kod:
rm -rf /var/cache/nginx/*
systemctl reload nginx



4. PHP-FPM ayarları

Varsayılan PHP-FPM ayarları küçük sunucular için yazılmıştır. Yoğun bir sitede işlem havuzu dolar ve ziyaretçiler "502 Bad Gateway" görür.

Ayar dosyasını aç:

Kod:
nano /etc/php/8.3/fpm/pool.d/oblifex.conf

Kritik satırlar şunlar:

Kod:
pm = dynamic
pm.max_children = 30
pm.start_servers = 6
pm.min_spare_servers = 4
pm.max_spare_servers = 10
pm.max_requests = 500

Max_children değerini nasıl hesaplarsın?

Formül basit:

Kod:
max_children = (Kullanilabilir RAM - Diger servisler) / Ortalama PHP islem boyutu

Ortalama PHP işlem boyutunu şöyle ölçersin:

Kod:
ps -ylC php-fpm8.3 --sort:rss | awk '{sum+=$8; n++} END {print sum/n/1024 " MB"}'

Diyelim çıktı 45 MB geldi ve sunucunda 4 GB RAM var. MySQL ve sisteme 1,5 GB ayırırsan PHP'ye 2,5 GB kalır:

Kod:
2500 / 45 = yaklasik 55

Kaba bir referans tablosu:

Sunucu RAMmax_children (yaklaşık)
2 GB15 – 20
4 GB35 – 50
8 GB80 – 100
16 GB160 – 200

Bu değeri şişirme. Çok yüksek bir max_children trafiği kaldırmaz, sadece yoğunlukta sunucunun belleğini bitirip OOM killer'ın MySQL'i kapatmasına yol açar; site tamamen çöker.

Değişikliği uygula ve havuzu izle:

Kod:
systemctl restart php8.3-fpm
tail -f /var/log/php8.3-fpm.log

Logda server reached pm.max_children setting uyarısı görüyorsan değeri kademeli artır. Görmüyorsan dokunma.



5. OPcache — PHP'nin kendi hızlandırıcısı

OPcache, PHP kodunu her istekte yeniden derlemek yerine derlenmiş hâlini bellekte tutar. Genelde kurulu gelir ama ayarları düşüktür.

Kod:
nano /etc/php/8.3/fpm/conf.d/10-opcache.ini

Önerilen değerler:

Kod:
opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=20000
opcache.revalidate_freq=60
opcache.validate_timestamps=1
opcache.save_comments=1
opcache.jit_buffer_size=64M
opcache.jit=tracing

Kod:
systemctl restart php8.3-fpm

Aktif olduğunu doğrulamak için:

Kod:
php -i | grep opcache.enable

Not: Geliştirme yaptığın bir sunucuda validate_timestamps=0 yapma; kod değişikliklerin yansımaz, saatlerce "neden değişmiyor" diye uğraşırsın.



6. Redis kurulumu

Redis, veritabanı sorgu sonuçlarını ve oturum verilerini bellekte tutar. Forum ve e-ticaret gibi veritabanı yoğun sitelerde fark çok belirgindir.

Kod:
apt install -y redis-server php8.3-redis
systemctl enable --now redis-server

Bellek sınırı koy, yoksa Redis zamanla tüm RAM'i yer:

Kod:
nano /etc/redis/redis.conf

Şu satırları bul ve ayarla:

Kod:
maxmemory 512mb
maxmemory-policy allkeys-lru

Kod:
systemctl restart redis-server
systemctl restart php8.3-fpm

Çalışıyor mu kontrol et:

Kod:
redis-cli ping

PONG Cevabı gelmeli.

PHP oturumlarını Redis'e taşı

Kod:
nano /etc/php/8.3/fpm/php.ini

Kod:
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379"

Yazılım tarafı

XenForo için src/config.php dosyasına ekle:

Kod:
$config['cache']['enabled'] = true;
$config['cache']['provider'] = 'Redis';
$config['cache']['config'] = [
    'host' => '127.0.0.1',
    'port' => 6379
];

WordPress için Redis Object Cache eklentisini kur ve etkinleştir, ek ayara gerek yok.



7. MySQL / MariaDB ayarları

Varsayılan MariaDB ayarları çok muhafazakârdır. En kritik değer innodb_buffer_pool_size; veritabanının ne kadarının bellekte tutulacağını belirler.

Kod:
nano /etc/mysql/mariadb.conf.d/50-server.cnf

[mysqld] Bölümüne ekle:

Kod:
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
innodb_flush_method = O_DIRECT
innodb_flush_log_at_trx_commit = 2
max_connections = 150
tmp_table_size = 64M
max_heap_table_size = 64M
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2

innodb_buffer_pool_size İçin kural: veritabanı toplam boyutundan biraz büyük, ama sunucu RAM'inin yarısını geçmeyecek şekilde ayarla.

Kod:
systemctl restart mariadb

Bir hafta çalıştırdıktan sonra ayarlarını denetlemek için:

Kod:
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl
perl mysqltuner.pl

Bu script hangi değerin düşük kaldığını doğrudan söyler. Ayrıca slow.log dosyasını incele; sitenin yavaşlığı çoğu zaman tek bir indekslenmemiş sorgudan kaynaklanır.



8. Gzip, Brotli ve tarayıcı önbelleği

Sıkıştırma, sunucu yükünü artırmadan sayfa boyutunu ciddi oranda düşürür.

Kod:
nano /etc/nginx/conf.d/gzip.conf

Kod:
gzip on;
gzip_vary on;
gzip_comp_level 5;
gzip_min_length 256;
gzip_proxied any;
gzip_types text/plain text/css text/xml application/json application/javascript application/xml+rss image/svg+xml;

Statik dosyalar için tarayıcı önbelleği, domainin ek conf dosyasına:

Kod:
location ~* \.(jpg|jpeg|png|gif|webp|avif|ico|css|js|woff2)$ {
    expires 30d;
    add_header Cache-Control "public, immutable";
    access_log off;
}

Kod:
nginx -t && systemctl reload nginx



9. Sonucu ölç

Değişikliklerin işe yarayıp yaramadığını sayıyla gör. Sunucunun kendi üzerinden ham yanıt süresini ölç:

Kod:
curl -o /dev/null -s -w "Toplam: %{time_total}s | Ilk byte: %{time_starttransfer}s\n" https://oblifex.com

Yük testi için:

Kod:
apt install -y apache2-utils
ab -n 500 -c 20 https://oblifex.com/

Sayfanın tarayıcı tarafındaki performansı için PageSpeed Insights ve GTmetrix kullan. Ama şunu unutma: sunucu optimizasyonu skorun sadece bir kısmıdır. Optimize edilmemiş görseller, aşırı JavaScript ve üçüncü parti scriptler sunucuyla ilgili değildir, tema tarafında çözülür.



Sık karşılaşılan hatalar

Önbellek açtım, giriş yapmış kullanıcılar başkasının sayfasını görüyor
skip_cache Çerez listesi eksik. Kullandığın yazılımın oturum çerezini mutlaka ekle. Bu ciddi bir güvenlik sorunudur, hemen düzelt.

502 Bad Gateway alıyorum
PHP-FPM havuzu dolmuş ya da servis çökmüş. systemctl status php8.3-fpm İle bak, max_children uyarısı varsa değeri artır.

Ayar yaptım ama değişiklik yansımıyor
Panel şablonunu yeniden oluşturunca dosyaların silinmiştir. Domaine özel ayarları nginx.conf_ ile başlayan ek dosyalarda tut, ana nginx.conf dosyasını doğrudan düzenleme.

MariaDB açılmıyor
innodb_buffer_pool_size Değeri mevcut RAM'den büyük olabilir. journalctl -u mariadb -n 50 İle gerçek hatayı gör, değeri düşür.

Sunucu yeniden başladıktan sonra site yavaşladı
Önbellek boşaldı, doğal. Birkaç dakika trafik aldıktan sonra tekrar hızlanır.

Redis kurdum ama fark yok
Yazılım tarafında etkinleştirmemişsindir. redis-cli monitor Çalıştırıp siteyi gezin; ekranda hareket yoksa yazılım Redis'i kullanmıyordur.



Optimizasyonda altın kural: tek seferde tek değişiklik yap ve ölç. Beş ayarı birden değiştirip site bozulunca hangisinin sorun çıkardığını asla bulamazsın.

Sunucunuzun htop çıktısını ve site boyutunu buraya yazarsanız size özel değerler önerebilirim. Serinin devamında HestiaCP'de sunucu güvenliğini sıkılaştırma konusunu işleyeceğim.
 

Telegram kanalımız

Önemli konulardan ilk sen haberdar ol. Yeni konular anında Telegram kanalımıza düşüyor.

4 üye

Kanala katıl

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.

Izgara yada normal mod

Temanızda forum listeleme yapısını ızgara yapısında yada normal yapıda listemek için kullanabilirsiniz.

Forum arkaplan resimleri

Forum arkaplanlarına eklenmiş olan resimlerinin kontrolü senin elinde, resimleri aç/kapat

Sidebar blogunu kapat/aç

Forumun kalabalığında kurtulmak için sidebar (kenar çubuğunu) açıp/kapatarak gereksiz kalabalıklardan kurtula bilirsiniz.

Yapışkan sidebar kapat/aç

Yapışkan sidebar ile sidebar alanını daha hızlı ve verimli kullanabilirsiniz.

Radius aç/kapat

Blok köşelerinde bulunan kıvrımları kapat/aç bu şekilde tarzını yansıt.

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.

Geri