Şimdi yükleniyor

cPanel/WHM: PHP-FPM ile Gelişmiş Performans Optimizasyonu

cPanel/WHM: PHP-FPM ile Gelişmiş Performans Optimizasyonu

Web sitelerinin hızı ve performansı, hem kullanıcı deneyimi hem de arama motoru sıralamaları için kritik bir faktördür. Özellikle yoğun trafiğe sahip veya kaynak yoğun uygulamalar çalıştıran sunucularda, PHP işleme mekanizmasının doğru yapılandırılması hayati önem taşır. Geleneksel olarak Apache ile kullanılan mod_php, her istek için yeni bir Apache süreci başlatarak kaynak tüketimini artırabilir ve performansı düşürebilir. İşte tam bu noktada, PHP-FPM (FastCGI Process Manager) devreye girerek çok daha verimli ve kararlı bir çözüm sunar. Bu makalede, cPanel ve WHM ortamında PHP-FPM’nin teknik temellerini, nasıl etkinleştirileceğini, ince ayarlarını, olası hata çözümlerini ve güvenlik ipuçlarını derinlemesine inceleyeceğiz.

PHP-FPM’nin Teknik Temelleri ve Avantajları

PHP-FPM, PHP yorumlayıcısı için bir FastCGI uygulamasıdır. Geleneksel mod_php’nin aksine, PHP-FPM ayrı bir süreç yöneticisi olarak çalışır ve PHP isteklerini işlemek için önceden belirlenmiş sayıda “çocuk süreç” (child processes) havuzu oluşturur. Bu süreçler, Apache veya Nginx gibi web sunucularından gelen PHP isteklerini FastCGI protokolü üzerinden alır ve işler. Bu mimarinin başlıca avantajları şunlardır:

  • Daha İyi Performans: Her istek için PHP yorumlayıcısını yeniden başlatmak yerine, hazırda bekleyen süreçler kullanıldığından istek işleme süresi kısalır.
  • Daha Az Kaynak Tüketimi: Bellek ve CPU kullanımı, özellikle yüksek trafik altında, mod_php’ye göre önemli ölçüde daha düşüktür.
  • Gelişmiş Kararlılık: Bir PHP sürecindeki hata, tüm web sunucusunu etkilemek yerine yalnızca o süreci etkiler.
  • Kullanıcı İzolasyonu: Her cPanel kullanıcısı için ayrı PHP-FPM havuzları oluşturulabilir, bu da güvenlik ve kaynak yönetimi açısından büyük avantaj sağlar.
  • Gelişmiş Yapılandırma Seçenekleri: Her havuz için özel PHP ayarları ve kaynak limitleri belirleme imkanı sunar.

WHM Üzerinden PHP-FPM Etkinleştirme ve Yapılandırma

cPanel/WHM sunucusunda PHP-FPM’yi etkinleştirmek oldukça kolaydır ve genellikle EasyApache 4 arayüzü üzerinden yapılır.

Adım 1: EasyApache 4’e Erişim

WHM panelinize root erişimiyle giriş yapın. Sol menüden “Software” (Yazılım) bölümüne gidin ve “EasyApache 4” seçeneğine tıklayın.

Adım 2: PHP Sürümü ve FPM Paketi Seçimi

EasyApache 4 arayüzünde, “Currently Installed Packages” (Şu Anda Yüklü Paketler) altında mevcut PHP profillerinizi göreceksiniz. Eğer PHP-FPM’yi etkinleştirmek istediğiniz PHP sürümü (örneğin, PHP 7.4, 8.0, 8.1, 8.2) zaten yüklüyse, o sürümün “Customize” (Özelleştir) düğmesine tıklayın. Eğer yüklü değilse, “Provision” (Sağla) veya “Install” (Yükle) seçeneklerini kullanarak istediğiniz PHP sürümünü ekleyin.

Özelleştirme ekranında “PHP Versions” (PHP Sürümleri) sekmesinde, kullanmak istediğiniz PHP sürümünün yanındaki “php-fpm” uzantısını seçili hale getirin. Ardından “Apache Modules” (Apache Modülleri) sekmesinde, “mod_mpm_event” veya “mod_mpm_worker” modüllerinden birinin yüklü olduğundan emin olun. PHP-FPM, genellikle Apache’nin MPM (Multi-Processing Module) Event veya Worker modülleriyle daha iyi performans gösterir.

Adım 3: Yapılandırmayı Kaydetme

Gerekli seçimleri yaptıktan sonra “Review” (İncele) sekmesine gidin ve değişiklikleri onaylayın. “Provision” (Sağla) düğmesine tıklayarak EasyApache 4’ün seçtiğiniz PHP-FPM paketlerini kurmasını ve yapılandırmasını bekleyin. Bu işlem biraz zaman alabilir.

Adım 4: cPanel’de PHP-FPM’yi Etkinleştirme

EasyApache 4 kurulumu tamamlandıktan sonra, cPanel’e giriş yapın (kullanıcı hesabı olarak). “SOFTWARE” (Yazılım) bölümünde “MultiPHP Manager” (MultiPHP Yöneticisi) seçeneğine tıklayın. Burada, web sitelerinizin listesini göreceksiniz. PHP-FPM kullanmak istediğiniz alan adının yanındaki “PHP Version” (PHP Sürümü) açılır menüsünden, PHP-FPM etkinleştirilmiş PHP sürümünü seçin ve “Apply” (Uygula) düğmesine tıklayın. Bu işlem, ilgili web sitesi için PHP-FPM’yi varsayılan PHP işleyicisi olarak ayarlar.

PHP-FPM Havuz Ayarlarını Anlama ve İnce Ayarlar

PHP-FPM’nin gerçek gücü, havuz ayarlarının doğru bir şekilde yapılandırılmasında yatar. Bu ayarlar, sunucunuzun kaynaklarına ve web sitenizin trafiğine göre optimize edilmelidir. Ayarlar genellikle /etc/apache2/conf.d/userdata/std/2_4/user/domain.com/php-fpm.conf veya WHM MultiPHP INI Editor üzerinden özelleştirilir.

Temel Yapılandırma Parametreleri:

  • pm (process manager): Bu parametre, PHP-FPM’nin çocuk süreçleri nasıl yöneteceğini belirler.
    • static: Belirtilen sayıda sabit çocuk süreci başlatır. Yüksek bellekli sunucular ve öngörülebilir, sürekli yüksek trafikli siteler için idealdir.
    • ondemand: Yalnızca ihtiyaç duyulduğunda çocuk süreçleri başlatır ve boşta kaldıklarında sonlandırır. Bellek tasarrufu sağlar, ancak ilk isteğe yanıt süresi biraz daha uzun olabilir. Düşük trafikli veya paylaşımlı barındırma ortamları için uygundur.
    • dynamic: Belirli bir minimum sayıda süreç başlatır ve gerektiğinde maksimum sayıya kadar otomatik olarak ölçeklenir. En yaygın ve dengeli moddur.
  • pm.max_children: Bir havuzun oluşturabileceği maksimum çocuk süreci sayısı. Bu değer, sunucunun toplam RAM’i ve her PHP sürecinin ortalama bellek tüketimi göz önünde bulundurularak dikkatlice ayarlanmalıdır. Örneğin, 4GB RAM’e sahip bir sunucuda her PHP süreci 50MB kullanıyorsa, max_children 80’i geçmemelidir (4000MB / 50MB = 80).
  • pm.start_servers (yalnızca dynamic için): Başlangıçta oluşturulacak çocuk süreci sayısı.
  • pm.min_spare_servers (yalnızca dynamic için): Boşta bekleyen minimum çocuk süreci sayısı.
  • pm.max_spare_servers (yalnızca dynamic için): Boşta bekleyen maksimum çocuk süreci sayısı. Bu değer, pm.max_children‘dan küçük olmalıdır.
  • pm.max_requests: Her çocuk sürecinin yeniden başlatılmadan önce kaç istek işleyeceği. Bellek sızıntılarını önlemek için faydalıdır. Genellikle 500-1000 arasında bir değer önerilir.
  • listen: PHP-FPM’nin hangi adreste ve portta veya Unix soketinde dinleyeceğini belirtir. cPanel/WHM genellikle Unix soketleri kullanır (örneğin, /var/run/php-fpm/user.sock).
  • request_terminate_timeout: Bir PHP scriptinin çalışmasına izin verilen maksimum süre (saniye cinsinden). Uzun süren veya takılan scriptlerin sunucuyu kilitlemesini engeller.
  • slowlog: Belirtilen süreden daha uzun süren scriptlerin loglanacağı dosya yolu. Performans sorunlarını tespit etmek için çok değerlidir.

Bu ayarları değiştirdikten sonra, PHP-FPM hizmetini yeniden başlatmanız gerektiğini unutmayın. Bunu WHM üzerinden “Restart Services” (Hizmetleri Yeniden Başlat) > “PHP-FPM Service” (PHP-FPM Hizmeti) yoluyla yapabilirsiniz.

Olası Hata Çözümleri (Troubleshooting)

500 Internal Server Errors

Bu, genellikle PHP-FPM havuz ayarlarında veya php.ini dosyasında bir hata olduğunu gösterir. Öncelikle Apache error loglarını (/var/log/apache2/error_log) ve PHP-FPM error loglarını (cPanel kullanıcısının ana dizinindeki logs klasöründe veya sistem çapında /var/log/php-fpm/ altında) kontrol edin. Yanlış yapılandırılmış pm.max_children değeri, sunucu kaynaklarının tükenmesine ve 500 hatalarına yol açabilir. Ayrıca, PHP-FPM havuzunun başlatılıp başlatılmadığını kontrol edin.

Yüksek CPU veya RAM Kullanımı

Eğer PHP-FPM etkinleştirdikten sonra sunucunuzda yüksek CPU veya RAM kullanımı gözlemliyorsanız, pm.max_children değerini düşürmeniz gerekebilir. Her PHP sürecinin ne kadar bellek kullandığını öğrenmek için ps aux --sort -rss | grep php-fpm komutunu kullanabilirsiniz. Bu bilgiye dayanarak pm.max_children değerini optimize edin.

Sayfa Yükleme Yavaşlığı

Yavaş yüklenen sayfalar için request_terminate_timeout ve slowlog parametrelerini inceleyin. slowlog, hangi scriptlerin belirtilen süreden daha uzun sürdüğünü görmenizi sağlar, bu da optimizasyon gerektiren alanları belirlemenize yardımcı olur.

Güvenlik İpuçları

  • open_basedir: Her cPanel kullanıcısının PHP-FPM havuzu için open_basedir kısıtlamasını etkinleştirin. Bu, PHP scriptlerinin yalnızca belirli dizinlere erişmesini sağlayarak güvenlik açıklarını azaltır.
  • disable_functions: Sunucu güvenliğini tehlikeye atabilecek exec, shell_exec, system gibi fonksiyonları php.ini dosyasında devre dışı bırakın.
  • Günlükleri İzleme: PHP-FPM ve Apache hata günlüklerini düzenli olarak kontrol edin. Anormal etkinlikleri veya hataları erken tespit etmek, potansiyel güvenlik sorunlarını önleyebilir.
  • Kullanıcı İzolasyonu: PHP-FPM’nin her kullanıcı için ayrı havuzlar oluşturma yeteneğini kullanarak, bir hesabın güvenliğinin tehlikeye girmesi durumunda diğer hesaplara yayılmasını engelleyin.

Performans Optimizasyonları ve İzleme

PHP-FPM’den en iyi verimi almak için sürekli izleme ve ince ayar gereklidir. WHM’deki “Process Manager” (Süreç Yöneticisi) veya komut satırından top, htop gibi araçlarla sunucunuzun CPU ve RAM kullanımını takip edin. PHP-FPM havuz ayarlarınızı, sunucunuzun ortalama yüküne ve boşta duran kaynaklarına göre dinamik olarak ayarlayın. Örneğin, sunucunuzun RAM’i yetersiz kalıyorsa pm.max_children değerini düşürmeniz veya daha fazla RAM eklemeniz gerekebilir. Ayrıca, PHP-FPM’yi OPcache gibi PHP önbellekleme mekanizmalarıyla birlikte kullanarak performansı daha da artırabilirsiniz. Veritabanı sorgularını optimize etmek ve web sitenizde statik içerik için uygun önbellekleme mekanizmaları kullanmak, PHP-FPM’nin sunduğu hız avantajlarını tamamlayıcı niteliktedir. Doğru yapılandırılmış bir PHP-FPM ortamı, web sitelerinizin daha hızlı yüklenmesini, daha fazla ziyaretçiye hizmet vermesini ve genel olarak daha kararlı bir sunucu deneyimi sunmasını sağlayacaktır. Bu, hem sizin hem de web sitenizin kullanıcıları için uzun vadede önemli faydalar anlamına gelir.

You May Have Missed