15%

Tüm Hosting Hizmetlerinde %15 indirim

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın:

Skills
Başlayın
01.11.2024
1 +1

VPS’de PHP Modları: mod_php vs FastCGI vs PHP-FPM — Tam Rehber

PHP, internetin %80’inden fazlasını güçlendirmesine rağmen, en sık göz ardı edilen performans kararlarından biri doğru PHP yürütme modunu seçmektir. Yanlış olanı seçerseniz, yavaş yükleme süreleri, aşırı RAM tüketimi ve trafik artışları sırasında sunucu çökmesiyle karşı karşıya kalırsınız. Doğru olanı seçerseniz, uygulamanız ağır eşzamanlı yük altında bile zahmetsizce ölçeklenir.

Bu kılavuz, üç ana PHP yürütme modunu — mod_php, FastCGI ve PHP-FPM — gerçek dünya performans bağlamı, yapılandırma örnekleri ve farklı kullanım durumları için açık önerilerle açıklamaktadır. Kişisel bir blog veya yüksek trafikli bir e-ticaret platformu çalıştırıyor olsanız da, bu modları anlamak sunucu ortamınızdan en iyi şekilde yararlanmanın temelini oluşturur.

İçindekiler

  1. PHP Yürütme Modları Nedir?
  2. mod_php — Klasik Apache Modülü
  3. FastCGI — PHP’yi Web Sunucusundan Ayırmak
  4. PHP-FPM — Yüksek Performans için Modern Standart
  5. Yan Yana Karşılaştırma
  6. VPS’de PHP-FPM Kurulumu (Ubuntu/Debian)
  7. Nginx ile PHP-FPM
  8. Apache ile PHP-FPM
  9. Üretim için PHP-FPM Pool Ayarlaması
  10. Hangi PHP Modunu Seçmelisiniz?
  11. Sonuç

PHP Yürütme Modları Nedir? {#what-are-php-execution-modes}

Bir PHP yürütme modu, web sunucunuzun PHP komut dosyalarını nasıl yorumladığını ve çalıştırdığını tanımlar. Web sunucusu işlemi (Apache, Nginx, LiteSpeed) ile PHP yorumlayıcısı arasındaki ilişkiyi belirler — özellikle, aynı işlemi paylaşıp paylaşmadıklarını, bir protokol aracılığıyla iletişim kurduklarını veya tamamen ayrı yönetilen hizmetler olarak çalışıp çalışmadıklarını.

Üç birincil mod şunlardır:

ModMimariEn İyi Kullanım
mod_phpApache’ye gömülü PHPBasit paylaşılan ortamlar
FastCGIAyrı bir işlem olarak PHPOrta trafikli siteler
PHP-FPMYönetilen PHP işlem havuzlarıYüksek trafikli, üretim uygulamaları

Doğru modu seçmek, bellek kullanımını, istek verimini, yalıtımı ve ölçeklenebilirliği doğrudan etkiler. Kaynakların adanmış ve yapılandırılabilir olduğu bir VPS Hosting ortamında, iş yükünüze en uygun modu uygulamak için tam özgürlüğe sahipsiniz.

mod_php — Klasik Apache Modülü {#mod_php}

mod_php Nedir?

mod_php PHP yorumlayıcısını doğrudan Apache web sunucusu işlemine gömülü bir Apache modülüdür. PHP’yi çalıştırmanın en eski ve tarihsel olarak en yaygın yöntemidir.

mod_php Nasıl Çalışır?

Apache bir .php dosyası için bir istek aldığında, yürütmeyi dahili olarak işler — hiçbir harici işlem oluşturulmaz, hiçbir soket iletişimi gerçekleşmez. PHP, Apache’nin içinde yaşar.

Browser Request → Apache (with embedded PHP) → Response

Performans Özellikleri

Düşük trafikli web siteleri ve geliştirme ortamları için mod_php yeterli performans gösterir. PHP zaten Apache’nin belleğine yüklenmiş olduğundan, istek başına işlem oluşturma ek yükü yoktur.

Ancak bu mimarinin kritik bir kusuru vardır: her Apache çalışan işlemi, bir resim veya CSS dosyası gibi statik bir varlık sunuyor olsa bile, belleğinde tam bir PHP yorumlayıcısı taşır.

mod_php’nin Dezavantajları

  • Yüksek bellek tüketimi: Her Apache çalışanı (statik dosyalar sunan olanlar bile) tam PHP çalışma zamanını RAM’de tutar.
  • Site başına yalıtım yok: Tüm sanal konaklar aynı PHP işlemini ve kullanıcı bağlamını paylaşır, bu da çok kiracılı sunucularda bir güvenlik endişesidir.
  • Sınırlı yapılandırma esnekliği: Önemli geçici çözümler olmadan farklı sanal konaklar için farklı PHP sürümlerini çalıştıramazsınız.
  • Nginx ile uyumsuz: mod_php Apache’ye özeldir; Nginx veya LiteSpeed ile kullanılamaz.
  • Yük altında zayıf ölçeklenebilirlik: Yüksek eşzamanlılık altında, bellek tükenmesi gerçek bir risk haline gelir.

mod_php Ne Zaman Kullanılır?

  • Yerel geliştirme ortamları
  • Çok düşük trafikli kişisel siteler
  • Yeniden yapılandırmanın uygulanabilir olmadığı eski uygulamalar

FastCGI — PHP’yi Web Sunucusundan Ayırmak {#fastcgi}

FastCGI Nedir?

FastCGI, web sunucusunun PHP’yi kendisine gömmek yerine harici bir PHP işlemiyle iletişim kurmasını sağlayan bir protokoldür. mod_php üzerinde önemli bir mimari iyileştirmedir.

FastCGI Nasıl Çalışır?

Web sunucusu (Apache veya Nginx) PHP isteklerini bir Unix soketi veya TCP bağlantı noktası aracılığıyla kalıcı bir FastCGI işlemine iletir. PHP işlemi yürütmeyi işler ve sonucu döndürür.

Browser Request → Web Server → FastCGI Socket → PHP Process → Response

Buradaki anahtar kelime kalıcı: orijinal protokol olan CGI’nin aksine, FastCGI işlemleri istekler arasında canlı kalır ve her tek istek için yeni bir işlem oluşturma ek yükünü ortadan kaldırır.

Performans Özellikleri

FastCGI, statik dosya istekleri PHP’yi hiç içermeden tamamen web sunucusu tarafından işlendiğinden, mod_php ile karşılaştırıldığında bellek ek yükünü önemli ölçüde azaltır. PHP işlemleri yalnızca gerçekten gerekli olduğunda çağrılır.

FastCGI’nin Dezavantajları

  • Yapılandırma karmaşıklığı: mod_php ile karşılaştırıldığında, soket veya bağlantı noktası yapılandırması dahil olmak üzere ek kurulum gerektirir.
  • Sınırlı işlem yönetimi: Temel FastCGI, üretim ortamları için gerekli olan gelişmiş havuz yönetimi özelliklerinden yoksundur.
  • PHP-FPM tarafından yerine geçmiş: Çoğu modern dağıtımda, temel FastCGI uygulamalarının yerine PHP-FPM (FastCGI’nin üzerine inşa edilmiş) tercih edilir.

FastCGI Ne Zaman Kullanılır?

  • Orta trafikli web siteleri
  • PHP-FPM’nin mevcut olmadığı ortamlar
  • mod_php ‘den uzaklaşan geçiş kurulumları

PHP-FPM — Yüksek Performans için Modern Standart {#php-fpm}

PHP-FPM Nedir?

PHP-FPM (FastCGI Process Manager), FastCGI protokolünün gelişmiş, özellik açısından zengin bir uygulamasıdır. Üretim ortamlarında PHP’yi çalıştırmak için fiili standarttır ve herhangi bir ciddi web uygulaması için önerilen moddur.

PHP-FPM Nasıl Çalışır?

PHP-FPM bir PHP çalışan işlem havuzunu yönetir. Web sunucusu PHP isteklerini bir Unix soketi veya TCP bağlantısı aracılığıyla PHP-FPM’ye iletir. PHP-FPM, mevcut trafiğe dayalı olarak etkin çalışan işlemlerin sayısını dinamik olarak yönetir, yük altında yeni çalışanlar oluşturur ve sessiz dönemlerde onları serbest bırakır.

Browser Request → Nginx/Apache → Unix Socket → PHP-FPM Pool → PHP Worker → Response

PHP-FPM’nin Temel Avantajları

#### 1. Dinamik İşlem Yönetimi

PHP-FPM birden fazla işlem yönetimi stratejisini destekler:

  • static: Sabit sayıda çalışan işlemi (tahmin edilebilir, yüksek trafik için iyi)
  • dynamic: Çalışanlar talebe göre minimum ve maksimum arasında ölçeklenir
  • ondemand: İstekler geldiğinde çalışanlar oluşturulur (düşük trafik için bellek açısından verimli)

#### 2. Pool Başına Yapılandırma

Her uygulama veya sanal konak, bağımsız ayarlarla kendi PHP-FPM havuzuna sahip olabilir:

  • Ayrı Unix kullanıcısı/grubu (geliştirilmiş güvenlik yalıtımı)
  • Havuz başına farklı PHP sürümü
  • Uygulama başına özel php.ini değerleri
  • Bireysel kaynak sınırları

#### 3. Yavaş İstek Günlüğü

PHP-FPM, tanımlı bir yürütme süresi eşiğini aşan istekleri günlüğe kaydedebilir, bu da performans darboğazlarını tanımlamak için çok değerlidir.

#### 4. Kaynak Verimliliği

PHP işlemleri web sunucusundan ayrı olarak yönetildiğinden, statik varlıklar herhangi bir PHP ek yükü olmadan sunulur. Bellek yalnızca etkin PHP çalışanları tarafından tüketilir.

#### 5. Uyumluluk

PHP-FPM, Nginx, Apache (mod_proxy_fcgi aracılığıyla) ve LiteSpeed ile sorunsuz çalışır. Nginx veya LiteSpeed ile birleştirildiğinde, performans kazançları önemlidir — genellikle Apache ile mod_php ile karşılaştırıldığında eşzamanlı yük altında 5–10 kat daha hızlı olarak alıntılanır.

Yan Yana Karşılaştırma {#comparison}

Özellikmod_phpFastCGIPHP-FPM
MimariApache’ye gömülüHarici işlemYönetilen işlem havuzu
Bellek verimliliğiDüşükOrtaYüksek
Statik dosya ek yüküYüksekDüşükDüşük
Eşzamanlı istek işlemeZayıfİyiMükemmel
Site başına PHP sürümüHayırSınırlıEvet
Güvenlik yalıtımıZayıfOrtaMükemmel
Nginx uyumluluğuHayırEvetEvet
Yapılandırma karmaşıklığıDüşükOrtaOrta
Üretim hazırlığıHayırKısmiEvet
Yavaş istek günlüğüHayırHayırEvet

VPS’de PHP-FPM Kurulumu (Ubuntu/Debian) {#setup}

Aşağıdaki talimatlar Ubuntu 22.04 LTS ve Debian 11/12 için geçerlidir. VPS Hosting planında uygulamanızı çalıştırıyorsanız, bu komutları yürütmek için tam kök erişimine sahip olacaksınız.

Adım 1: Sisteminizi Güncelleyin ve PHP-FPM’yi Yükleyin

sudo apt update && sudo apt upgrade -y
sudo apt install php-fpm -y

Belirli bir PHP sürümü yüklemek için (örneğin, PHP 8.2):

sudo apt install software-properties-common -y
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update
sudo apt install php8.2-fpm -y

Adım 2: PHP-FPM’nin Çalıştığını Doğrulayın

sudo systemctl status php8.2-fpm

Çıktıda active (running) görmelisiniz. Görmüyorsanız, başlatın ve etkinleştirin:

sudo systemctl start php8.2-fpm
sudo systemctl enable php8.2-fpm

Adım 3: Soket Yolunu Doğrulayın

PHP-FPM bir Unix soketi aracılığıyla iletişim kurar. Konumunu doğrulayın:

ls /var/run/php/
# Expected output: php8.2-fpm.sock

Nginx ile PHP-FPM {#nginx}

Nginx, PHP-FPM ile eşleştirilen en yaygın web sunucusudur ve iyi bir nedenle — Nginx’in olay odaklı, engellemesiz mimarisi PHP-FPM’nin işlem havuzu modelini mükemmel şekilde tamamlar.

Nginx’i Yükleyin

sudo apt install nginx -y

Nginx Sunucu Bloğunu Yapılandırın

Sitenizin yapılandırma dosyasını düzenleyin:

sudo nano /etc/nginx/sites-available/yourdomain.com

Aşağıdaki yapılandırmayı ekleyin:

server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;
    root /var/www/yourdomain.com/public;
    index index.php index.html index.htm;

    # Handle PHP files
    location ~ .php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # Deny access to .htaccess files
    location ~ /.ht {
        deny all;
    }

    # Serve static files directly
    location ~* .(jpg|jpeg|png|gif|ico|css|js|woff2)$ {
        expires 30d;
        add_header Cache-Control "public, no-transform";
    }
}

Siteyi Etkinleştirin ve Nginx’i Yeniden Başlatın

sudo ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

Apache ile PHP-FPM {#apache}

Apache’yi tercih ederseniz — veya uygulamanız .htaccess dosyalarına dayanıyorsa — Apache’nin mod_proxy_fcgi modülü aracılığıyla yine de PHP-FPM’yi kullanabilirsiniz.

Gerekli Apache Modüllerini Etkinleştirin

sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php8.2-fpm

Apache Sanal Konağını Yapılandırın

sudo nano /etc/apache2/sites-available/yourdomain.com.conf
<VirtualHost *:80>
    ServerName yourdomain.com
    ServerAlias www.yourdomain.com
    DocumentRoot /var/www/yourdomain.com/public

    <Directory /var/www/yourdomain.com/public>
        AllowOverride All
        Require all granted
    </Directory>

    # Route PHP requests to PHP-FPM
    <FilesMatch .php$>
        SetHandler "proxy:unix:/var/run/php/php8.2-fpm.sock|fcgi://localhost/"
    </FilesMatch>

    ErrorLog ${APACHE_LOG_DIR}/yourdomain_error.log
    CustomLog ${APACHE_LOG_DIR}/yourdomain_access.log combined
</VirtualHost>

Siteyi Etkinleştirin ve Apache’yi Yeniden Başlatın

sudo a2ensite yourdomain.com.conf
sudo apache2ctl configtest
sudo systemctl restart apache2

Üretim için PHP-FPM Pool Ayarlaması {#tuning}

Varsayılan PHP-FPM havuzu yapılandırması muhafazakardır ve geliştirme için uygundur. Üretim iş yükleri için, sunucunuzun kullanılabilir RAM’i ve beklenen trafiğe dayalı olarak havuz ayarlarını ayarlamalısınız.

Pool Yapılandırma Dosyasını Bulun

sudo nano /etc/php/8.2/fpm/pool.d/www.conf

Ayarlanacak Temel Parametreler

; Process management mode: static, dynamic, or ondemand
pm = dynamic

; Maximum number of child processes
pm.max_children = 50

; Number of processes started on boot
pm.start_servers = 10

; Minimum idle processes
pm.min_spare_servers = 5

; Maximum idle processes
pm.max_spare_servers = 20

; Requests per child before recycling (prevents memory leaks)
pm.max_requests = 500

; Log slow requests (requests taking longer than 5 seconds)
request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm/slow.log

pm.max_children Hesaplanması

Dinamik ortamlar için pratik bir formül:

pm.max_children = (Available RAM in MB) / (Average PHP process size in MB)

Ortalama PHP işlem boyutunu bulmak için:

###PPT_NOTR

15%

Tüm Hosting Hizmetlerinde %15 indirim

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın:

Skills
Başlayın