PHP-FPM

PHP, web geliştirmede yaygın olarak kullanılan popüler bir betik dilidir. PHP kodunu bir web sunucusu (Apache, Nginx vb.) ile çalıştırmanın çeşitli yolları vardır. Eski yöntemlerden biri Apache'nin mod_php modülünü kullanmaktı, ancak bu yöntem genellikle daha az esnek ve performanslıdır.

Modern ve önerilen yaklaşım, PHP-FPM (FastCGI Process Manager) kullanmaktır. PHP-FPM, PHP için alternatif bir FastCGI daemon'ıdır ve web sunucusundan bağımsız olarak çalışır. Web sunucusu, gelen PHP isteklerini FastCGI protokolü üzerinden PHP-FPM'e iletir, PHP-FPM isteği işler ve sonucu web sunucusuna geri gönderir.

PHP-FPM'in Avantajları:

  • Performans: Genellikle mod_php'den daha iyi performans sunar.

  • Esneklik: Farklı web siteleri veya uygulamalar için ayrı PHP-FPM havuzları (pools) tanımlanabilir. Her havuz farklı kullanıcı/grup kimliğiyle, farklı PHP ayarlarıyla (php.ini) ve farklı kaynak limitleriyle çalıştırılabilir. Bu, güvenlik ve izolasyonu artırır.

  • Kaynak Yönetimi: İşlem yönetimi (process management - pm) ayarları (static, dynamic, ondemand) ile kaynak kullanımı daha iyi kontrol edilebilir.

  • Web Sunucusu Bağımsızlığı: Hem Apache hem de Nginx gibi farklı web sunucularıyla kullanılabilir.

Kurulum

PHP-FPM ve ilgili PHP paketleri genellikle dağıtımın paket yöneticisi ile kurulur. PHP sürümü (örn. 8.1, 8.2) dağıtıma göre değişir. Belirli bir sürümü kurmak için ek depolar (örn. REMI, Ondřej Surý PPA) gerekebilir.

  • RHEL Tabanlı (dnf): (Genellikle remi-release deposu etkinleştirildikten sonra)

    # Örnek: PHP 8.2 ve yaygın modülleri kurma
    sudo dnf module enable php:remi-8.2 -y 
    sudo dnf install php php-fpm php-mysqlnd php-gd php-xml php-mbstring php-intl -y
  • Debian Tabanlı (apt): (Genellikle ondrej/php PPA'sı eklendikten sonra veya dağıtımın kendi sürümü)

    # Örnek: PHP 8.2 ve yaygın modülleri kurma
    sudo apt update
    sudo apt install php8.2 php8.2-fpm php8.2-mysql php8.2-gd php8.2-xml php8.2-mbstring php8.2-intl -y

Servis Yönetimi (systemctl)

PHP-FPM servisi systemd ile yönetilir. Servis adı genellikle PHP sürümünü içerir.

PHP-FPM Havuz (Pool) Yapılandırması

PHP-FPM, farklı ayarlar ve kullanıcılarla çalışabilen havuzlar (pools) kullanır. Varsayılan havuz genellikle www olarak adlandırılır ve yapılandırması /etc/php/<sürüm>/fpm/pool.d/www.conf (Debian/Ubuntu) veya /etc/php-fpm.d/www.conf (RHEL/CentOS) gibi dosyalarda bulunur.

Her web sitesi veya uygulama için ayrı bir havuz oluşturmak iyi bir pratiktir.

Örnek Havuz Yapılandırması (/etc/php-fpm.d/example.com.conf):

Yeni bir havuz dosyası oluşturduktan veya mevcut olanı değiştirdikten sonra PHP-FPM servisini yeniden başlatmanız (sudo systemctl restart php<sürüm>-fpm) gerekir.

Web Sunucusu Yapılandırması

Web sunucusunun, PHP dosyalarına gelen istekleri ilgili PHP-FPM havuzunun dinlediği sokete (veya porta) FastCGI protokolü üzerinden iletmesi gerekir.

1. Apache ile PHP-FPM (mod_proxy_fcgi kullanarak)

Gerekli Apache modüllerini etkinleştirin:

Apache sanal ana bilgisayar yapılandırmasına (<VirtualHost> bloğu içine) aşağıdaki gibi bir direktif ekleyin (Unix soketi kullanarak):

Yapılandırmayı kontrol edip Apache'yi yeniden yükleyin:

2. Nginx ile PHP-FPM

Nginx sanal ana bilgisayar yapılandırmasındaki (server bloğu içine) location bloğunu PHP isteklerini işleyecek şekilde düzenleyin (Unix soketi kullanarak):

Yapılandırmayı kontrol edip Nginx'i yeniden yükleyin:

PHP-FPM, modern PHP uygulamalarını web sunucularıyla entegre etmek için standart ve performanslı bir yöntemdir. Farklı havuzlar kullanarak uygulamalar arasında daha iyi izolasyon ve kaynak yönetimi sağlar.

Last updated