PHP FastCGI Süreç Yöneticisi – PHP-FPM
PHP, web geliştirme için en yaygın kullanılan programlama dillerinden biridir. Büyük hacimli trafiği verimli bir şekilde idare etmek söz konusu olduğunda, PHP’nin performansı web sitelerinin genel hızını ve yanıt verebilirliğini önemli ölçüde etkileyebilir. İşte bu noktada PHP FastCGI Process Manager (PHP-FPM) devreye girer. PHP-FPM, PHP betiklerini çalıştırmak için yüksek performanslı bir yöntem sağlayan ve yaygın olarak benimsenen alternatif bir PHP işleyicisidir.
Bu makalede, PHP-FPM’in ne olduğunu, web sunucusu performansını optimize etmek için neden gerekli olduğunu ve PHP tabanlı uygulamalarınız için nasıl yapılandırılacağını inceleyeceğiz.
PHP-FPM nedir?
PHP-FPM veya PHP FastCGI Process Manager, PHP betikleri için bir FastCGI uygulamasıdır. FastCGI, istekleri standart CGI’dan (Common Gateway Interface) daha verimli bir şekilde ele alarak web sunucularının performansını artırmak için kullanılan bir protokoldür. CGI her istek için yeni bir süreç oluştururken (yüksek kaynak tüketimine yol açar), FastCGI birden fazla isteği işlemek için bir işçi süreç havuzunu hazır tutar ve böylece ek yükü azaltır.
PHP-FPM, FastCGI’nin üzerine bir süreç yönetimi katmanı ekleyerek süreç havuzu oluşturma, işçilerin isteğe bağlı olarak ortaya çıkması, zarif kapatma ve yüksek trafikli ortamları kolaylıkla idare etme gibi özelliklere olanak tanır. Artık NGINX ve Apachede dahil olmak üzere birçok modern web sunucusu için fiili standart PHP işleyicisidir.
Neden PHP-FPM Kullanılmalı?
- Geliştirilmiş Performans: PHP-FPM daha az kaynakla daha fazla eşzamanlı isteği işleyebilir, sunucu yükünü azaltır ve yanıt sürelerini hızlandırır. Bu, özellikle yüksek trafikli web siteleri veya trafikte ani artışlar yaşayan uygulamalar için faydalıdır.
- Süreç Yönetimi: PHP-FPM, ince ayarlı süreç yönetimine olanak tanıyarak PHP’nin istekleri nasıl ele alacağı üzerinde kontrol sahibi olmanızı sağlar. Beklenen iş yüküne uyacak şekilde ayarlanabilen bir işçi havuzu kullanır ve sunucu kaynaklarının verimli kullanılmasını sağlar.
- Daha İyi Kaynak Kullanımı: PHP-FPM süreçleri bir havuzda topladığından, aynı çalışanları kullanarak birden fazla isteğe hizmet verebilir ve sürekli olarak süreç oluşturma ve sonlandırma ihtiyacını en aza indirir. Bu, bellek kullanımını ve CPU verimliliğini artırır.
- Zarif Bozulma: Doğru yapılandırıldığında PHP-FPM, sunucunun aşırı yüklenmesi durumunda etkin süreçlerin sayısını azaltarak tam bir çökmeyi önleyerek zarif bir şekilde bozulabilir.
- Gelişmiş Özellikler: PHP-FPM, hata ayıklama için slow-log, uyarlanabilir süreç oluşturma ve PHP uygulamalarınızın performansı ve sağlığı hakkında bilgi sağlayan durum raporlaması gibi gelişmiş özellikler içerir.
PHP-FPM’in Temel Özellikleri
- Süreç Havuzları: PHP-FPM, PHP işçi süreçlerinin birden fazla havuzunu tanımlamanıza olanak tanır. Her havuz farklı ayarlarla yapılandırılabilir, böylece aynı sunucu üzerinde farklı trafik gereksinimleri olan farklı PHP uygulamaları çalıştırabilirsiniz.
- Uyarlanabilir Süreç Doğurma: PHP-FPM, trafik seviyelerine bağlı olarak işçi süreçlerinin sayısını otomatik olarak ölçeklendirebilir. Minimum sayıda işçi ile başlar ve gerektiğinde düşük trafik dönemlerinde kaynakları boşa harcamadan havuz boyutunu artırabilir.
- Yavaş Günlük: PHP-FPM’deki yavaş günlük özelliği, önceden tanımlanmış bir yürütme süresini aşan istekleri kaydeder. Bu, geliştiricilerin PHP kodlarındaki performans darboğazlarını belirlemelerine ve çözmelerine yardımcı olur.
- Durum Sayfası: PHP-FPM, havuz durumu, aktif çalışanlar, boşta çalışanlar ve performansı izlemek için kullanılabilecek diğer ölçümler hakkında gerçek zamanlı bilgi veren yerleşik bir durum sayfası sağlar.
- Zarif Kapatma: PHP-FPM, kapatılmadan önce devam eden isteklerin tamamlanmasına izin vererek süreçleri zarif bir şekilde sonlandırabilir. Bu, çalışan komut dosyalarının aniden sonlandırılmasını önleyerek daha iyi bir kullanıcı deneyimi sağlar.
PHP-FPM Nasıl Çalışır?
PHP-FPM, PHP betiklerini sunmak için NGINX veya Apache gibi bir web sunucusuna entegre edilmiş bağımsız bir FastCGI sunucusu olarak çalışır. Bir istek geldiğinde, web sunucusu PHP isteğini PHP-FPM hizmetine iletir; bu hizmet PHP kodunu çalıştırmak ve sonucu istemciye iletilmek üzere web sunucusuna geri göndermek için bir işçi süreçleri havuzunu yönetir.
PHP-FPM’nin bir isteği nasıl işlediğine dair basitleştirilmiş bir akış aşağıda verilmiştir:
- İstemci İsteği: Bir kullanıcı PHP kodu içeren bir web sayfası talep eder.
- Web Sunucusu İsteği Alır: Web sunucusu (NGINX veya Apache) isteği alır ve FastCGI protokolünü kullanarak PHP-FPM hizmetine iletir.
- PHP-FPM İşçisi İsteği İşler: PHP-FPM havuzundaki işçi süreçlerinden biri isteği işler, PHP betiğini çalıştırır ve çıktıyı döndürür.
- Yanıt Geri Gönderilir: Web sunucusu çıktıyı alır ve son işlenmiş HTML olarak istemciye geri gönderir.
PHP-FPM’nin Kurulumu ve Yapılandırılması
Adım 1: PHP-FPM Kurulumu
Çoğu Linux dağıtımı için PHP-FPM paket yöneticileri aracılığıyla kurulabilir. İşte yaygın sistemler için komutlar:
# Debian/Ubuntu için
sudo apt güncellemesi
sudo apt php-fpm yükleyin
# CentOS/RHEL için
sudo yum php-fpm yükleyin
Kurulduktan sonra PHP-FPM hizmetini başlatabilirsiniz:
sudo systemctl start php-fpm
Adım 2: PHP-FPM Havuzlarını Yapılandırma
PHP-FPM için ana yapılandırma dosyası, dağıtımınıza ve PHP sürümünüze bağlı olarak genellikle /etc/php/7.x/fpm/pool.d/ veya /etc/php-fpm.d/ içinde bulunur. Her havuz kendi dosyasında tanımlanır ve genellikle hizmet verdiği web sitesi veya uygulamanın adını alır. İşte bir havuz için örnek bir yapılandırma:
[www]
kullanıcı = www-data
group = www-data
listen = /run/php/php7.4-fpm.sock
listen.owner = www-data
listen.group = www-data
pm = dinamik
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10
pm.max_requests = 500
- pm = dinamik: Süreç yöneticisi, talebe bağlı olarak işçi süreçlerinin sayısını dinamik olarak ayarlayabilir.
- pm.max_children: İstekleri işlemek için ortaya çıkarılabilecek maksimum alt süreç sayısı.
- pm.start_servers: PHP-FPM başlatıldığında başlayan işçi süreçlerinin sayısı.
- pm.min_spare_servers ve pm.max_spare_servers: PHP-FPM’nin yüke bağlı olarak kaynakları ölçeklendirmesine izin veren en az ve en fazla boşta çalışan işçi sayısını tanımlar.
- pm.max_requests: Bir çalışanın sonlandırılmadan ve değiştirilmeden önce işleyebileceği en fazla istek sayısı. Bu, uzun süre çalışan komut dosyalarında bellek sızıntılarını önlemeye yardımcı olur.
Adım 3: Web Sunucusunu PHP-FPM Kullanacak Şekilde Yapılandırma
NGINX için:
NGINX yapılandırma dosyanızda (örneğin, /etc/nginx/sites-available/example.com) PHP-FPM’yi PHP işleyicisi olarak ayarlayın:
sunucu {
dinle 80;
server_name example.com;
root /var/www/html;
konum / {
try_files $uri $uri/ =404;
}
konum ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
}
}
Apache’de PHP-FPM’yi etkinleştirmek için mod_proxy_fcgi modülünün etkin olduğundan emin olun:
sudo a2enmod proxy_fcgi setenvif
Ardından Apache sanal konak yapılandırmanızı güncelleyin:
SunucuAdı example.com
DocumentRoot /var/www/htmlSetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost/"
Adım 4: Yapılandırmanın Test Edilmesi
PHP-FPM ve web sunucunuzu yapılandırdıktan sonra, değişiklikleri uygulamak için hizmetleri yeniden başlatın:
# NGINX için
sudo systemctl nginx'i yeniden başlat
# Apache için
sudo systemctl apache2'yi yeniden başlat
PHP-FPM’nin çalıştığını doğrulamak için web kök dizininizde bir phpinfo.php dosyası oluşturun:
?php
phpinfo();
?>
PHP-FPM’nin işleyici olarak listelenip listelenmediğini görmek için dosyayı tarayıcınızda (örneğin, http://example.com/phpinfo.php) ziyaret edin.
Sonuç
PHP-FPM, özellikle yüksek trafikli web siteleri için PHP performansını optimize etmek için önemli bir araçtır. Süreçleri verimli bir şekilde yöneterek, sunucu kaynak kullanımını iyileştirerek ve uyarlanabilir süreç ölçeklendirme ve yavaş günlük kaydı gibi gelişmiş özellikler sunarak geleneksel PHP işleyicilerine göre önemli avantajlar sağlar. PHP-FPM’yi özel ihtiyaçlarınızı karşılayacak şekilde yapılandırarak, PHP uygulamalarınızın ağır yükler altında bile sorunsuz ve verimli çalışmasını sağlayabilirsiniz.
Bu kılavuzdaki adımları izleyerek, PHP tabanlı projeleriniz için PHP-FPM’yi kurma ve optimize etme yolunda ilerlemiş olmalısınız.