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
- PHP Yürütme Modları Nedir?
- mod_php — Klasik Apache Modülü
- FastCGI — PHP’yi Web Sunucusundan Ayırmak
- PHP-FPM — Yüksek Performans için Modern Standart
- Yan Yana Karşılaştırma
- VPS’de PHP-FPM Kurulumu (Ubuntu/Debian)
- Nginx ile PHP-FPM
- Apache ile PHP-FPM
- Üretim için PHP-FPM Pool Ayarlaması
- Hangi PHP Modunu Seçmelisiniz?
- 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:
| Mod | Mimari | En İyi Kullanım |
|---|---|---|
| mod_php | Apache’ye gömülü PHP | Basit paylaşılan ortamlar |
| FastCGI | Ayrı bir işlem olarak PHP | Orta trafikli siteler |
| PHP-FPM | Yö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) → ResponsePerformans Ö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_phpApache’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 → ResponseBuradaki 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_phpile 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 → ResponsePHP-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.inideğ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}
| Özellik | mod_php | FastCGI | PHP-FPM |
|---|---|---|---|
| Mimari | Apache’ye gömülü | Harici işlem | Yönetilen işlem havuzu |
| Bellek verimliliği | Düşük | Orta | Yüksek |
| Statik dosya ek yükü | Yüksek | Düşük | Düşük |
| Eşzamanlı istek işleme | Zayıf | İyi | Mükemmel |
| Site başına PHP sürümü | Hayır | Sınırlı | Evet |
| Güvenlik yalıtımı | Zayıf | Orta | Mükemmel |
| Nginx uyumluluğu | Hayır | Evet | Evet |
| Yapılandırma karmaşıklığı | Düşük | Orta | Orta |
| Üretim hazırlığı | Hayır | Kısmi | Evet |
| Yavaş istek günlüğü | Hayır | Hayır | Evet |
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 -yBelirli 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 -yAdı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-fpmAdı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.sockNginx 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 -yNginx Sunucu Bloğunu Yapılandırın
Sitenizin yapılandırma dosyasını düzenleyin:
sudo nano /etc/nginx/sites-available/yourdomain.comAş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 nginxApache 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-fpmApache 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.confAyarlanacak 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.logpm.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
