VPS’de PHP Modları: mod_php vs FastCGI vs PHP-FPM — Tam Rehber
PHP, internetin %80’inden fazlasının gücünü sağlar, ancak en çok 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üreleriyle, aşırı RAM tüketimiyle ve trafik artışları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çıklar. 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 yararlanmak için temeldir.
PHP Yürütme Modları Nedir?
Bir PHP yürütme modu, web sunucunuzun PHP betiklerini 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ıştıklarını belirler.
Üç ana 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 düzey 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, izolasyonu ve ölçeklenebilirliği doğrudan etkiler. Kaynakların ayrılmış 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 Nedir?
mod_php PHP yorumlayıcısını doğrudan Apache web sunucusu işlemine gömüleyen bir Apache modülüdür. PHP ç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 başlatılmaz, 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ğu için, 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 PHP dosyası veya resim ya da CSS dosyası gibi statik bir varlık sunuyor olsun ya da olmasın, 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ı sunanlar bile) RAM’de tam PHP çalışma zamanını tutar.
- Site başına izolasyon yok: Tüm sanal konaklar aynı PHP işlemini ve kullanıcı bağlamını paylaşır; bu, ç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ümleri çalıştıramazsınız.
- Nginx ile uyumsuz:
mod_phpApache’ye özeldir; Nginx veya LiteSpeed ile kullanılamaz. - Yüksek 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ırma
FastCGI Nedir?
FastCGI, web sunucusunun PHP’yi kendi içine gömmek yerine harici bir PHP işlemiyle iletişim kurmasını sağlayan bir protokoldür. Bu, mod_php üzerinde önemli bir mimari iyileştirmedir.
FastCGI Nasıl Çalışır?
Web sunucusu (Apache veya Nginx), PHP isteklerini Unix soketi veya TCP portu aracılığıyla kalıcı bir FastCGI işlemine iletir. PHP işlemi yürütmeyi gerçekleştirir 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şturmanın yükünü ortadan kaldırır.
Performans Özellikleri
FastCGI, statik dosya istekleri web sunucusu tarafından tamamen işlendiğinden ve PHP hiç devreye girmediğinden, mod_php ile karşılaştırıldığında bellek 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 port yapılandırması dahil olmak üzere ek kurulum gerektirir. - Sınırlı işlem yönetimi: Temel FastCGI, üretim ortamları için gereken gelişmiş havuz yönetimi özelliklerine sahip değildir.
- PHP-FPM tarafından yerine geçirildi: Ç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 düzey trafikli web siteleri
- PHP-FPM’nin mevcut olmadığı ortamlar
mod_phpöğesinden uzaklaşan geçiş kurulumları
PHP-FPM — Yüksek Performans için Modern Standart
PHP-FPM Nedir?
PHP-FPM (FastCGI Process Manager), FastCGI protokolünün gelişmiş ve özellik açısından zengin bir uygulamasıdır. Üretim ortamlarında PHP ç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, PHP worker işlemlerinin bir havuzunu yönetir. Web sunucusu, PHP isteklerini Unix soketi veya TCP bağlantısı aracılığıyla PHP-FPM’e iletir. PHP-FPM, mevcut trafiğe göre etkin worker işlemlerinin sayısını dinamik olarak yönetir, yük altında yeni worker’lar başlatır ve sessiz dönemlerde bunları serbest bırakır.
Browser Request → Nginx/Apache → Unix Socket → PHP-FPM Pool → PHP Worker → ResponsePHP-FPM’in Temel Avantajları
1. Dinamik İşlem Yönetimi
PHP-FPM birden fazla işlem yönetimi stratejisini destekler:
- static: Sabit sayıda worker işlemi (öngörülebilir, yüksek trafik için iyi)
- dynamic: Worker’lar talebe göre minimum ve maksimum arasında ölçeklenir
- ondemand: Worker’lar yalnızca istekler geldiğinde başlatılır (düşük trafik için bellek açısından verimli)
2. Havuz Başına Yapılandırma
Her uygulama veya sanal host, bağımsız ayarlara sahip kendi PHP-FPM havuzuna sahip olabilir:
- Ayrı Unix kullanıcı/grubu (geliştirilmiş güvenlik izolasyonu)
- 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ı belirlemek 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 worker’lar 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 — eşzamanlı yük altında Apache ile mod_php ile karşılaştırıldığında genellikle 5–10 kat daha hızlı olarak belirtilir.
Yan Yana Karşılaştırma
| Ö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 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 izolasyonu | 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 Nasıl Yapılır (Ubuntu/Debian)
Aşağıdaki talimatlar Ubuntu 22.04 LTS ve Debian 11/12 için geçerlidir. Uygulamanızı bir VPS Hosting planında çalıştırıyorsanız, bu komutları yürütmek için tam root erişiminiz olacaktır.
Adım 1: Sisteminizi Güncelleyin ve PHP-FPM’yi Kurun
sudo apt update && sudo apt upgrade -y
sudo apt install php-fpm -yBelirli bir PHP sürümünü kurmak 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: Socket Yolunu Onaylayın
PHP-FPM bir Unix socket aracılığıyla iletişim kurar. Konumunu doğrulayın:
ls /var/run/php/
# Expected output: php8.2-fpm.sockPHP-FPM ile Nginx
Nginx, PHP-FPM ile eşleştirilen en yaygın web sunucusudur ve iyi bir nedeni vardır — 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 Server Block’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 nginxPHP-FPM with Apache
Apache’yi tercih ederseniz — veya uygulamanız .htaccess dosyalarına bağlıysa — Apache’nin mod_proxy_fcgi modülü aracılığıyla yine de PHP-FPM kullanabilirsiniz.
Gerekli Apache Modüllerini Etkinleştirin
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php8.2-fpmApache Virtual Host’u 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 apache2PHP-FPM Pool Tuning for Production
Varsayılan PHP-FPM pool yapılandırması muhafazakardır ve geliştirme için uygundur. Üretim iş yükleri için, pool ayarlarını sunucunuzun kullanılabilir RAM’ı ve beklenen trafiğine göre 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 Hesaplama
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:
ps --no-headers -o "rss,cmd" -C php-fpm8.2 | awk '{ sum+=$1 } END { printf "%.0f MBn", sum/NR/1024 }'Tipik bir WordPress sitesinde, her PHP-FPM worker yaklaşık 30–60 MB tüketir. 2 GB RAM’e sahip bir VPS’de (OS ek yükünden sonra ~1,5 GB PHP için ayrılmış), güvenle 25–50 worker çalıştırabilirsiniz.
Değişiklikleri Uygulayın
sudo systemctl reload php8.2-fpmHangi PHP Modunu Seçmelisiniz?
İşte pratik bir karar rehberi:
mod_php seçin eğer:
- Yerel geliştirme ortamı çalıştırıyorsanız
- Çok basit, düşük trafikli statik içerik siteniz varsa
- Başka seçeneği olmayan eski paylaşılan hostingde iseniz
FastCGI seçin eğer:
- Orta trafikli bir sitede iseniz ve PHP-FPM kullanılamıyorsa
mod_phpadresinden uzaklaşıyorsanız ve ara bir adıma ihtiyacınız varsa
PHP-FPM seçin eğer:
- Herhangi bir üretim uygulaması çalıştırıyorsanız
- Aynı sunucuda birden fazla PHP sürümü desteklemeniz gerekiyorsa
- WordPress, Laravel, Symfony, Magento veya herhangi bir modern PHP framework çalıştırıyorsanız
- Uygulama başına güvenlik izolasyonu istiyorsanız
- Nginx kullanıyorsanız (PHP-FPM tek uygulanabilir seçenektir)
- Eşzamanlı trafik altında ölçeklenebilirlik gerekiyorsa
Üretim kullanım durumlarının büyük çoğunluğu için PHP-FPM açık kazanandır. Modern yönetilen hosting platformlarında standart yapılandırmadır ve kendi kendine yönetilen herhangi bir VPS’de çalıştırmanız gereken şeydir.
Birden fazla web sitesini yönetiyorsanız ve PHP modu değiştirme, işlem havuzu yönetimi ve sanal host yapılandırmasını yapılandırma dosyalarını manuel olarak düzenlemeden grafiksel bir arayüzle işlemek istiyorsanız, cPanel’li VPS düşünün — cPanel’in EasyApache 4, birkaç tıkla etki alanı başına PHP işleyicilerini değiştirmenize olanak tanır.
Alternatif olarak, iş akışınıza en uygun yönetim arayüzünü bulmak için mevcut VPS Kontrol Panelleri nin tam aralığını keşfedin.
PHP Uygulamanızı Yürütme Modunun Ötesinde Güvence Altına Almak
Doğru PHP yürütme modunu seçmek, sunucu güvenliği ve performans stratejinizin bir katmanıdır. İşte ek hususlar:
SSL/TLS Şifrelemesi
Her üretim PHP uygulaması HTTPS üzerinden sunulmalıdır. Şifrelenmemiş bir site, kullanıcı verilerini ortaya çıkarır ve Google arama sonuçlarında daha düşük sıralanır. Etki alanınızı güvenilir bir SSL Sertifikası ile güvence altına alarak HTTPS’yi etkinleştirin ve ziyaretçilerinizi koruyun.
Yüksek Trafikli Uygulamalar için Ayrılmış Kaynaklar
PHP uygulamanız tutarlı bir şekilde binlerce eşzamanlı kullanıcıyı işliyorsa, paylaşılan veya giriş seviyesi VPS sonunda bir darboğaz haline gelebilir. Dedicated Servers, kaynak çekişmesi olmaksızın garantili CPU, RAM ve NVMe depolama sağlar — ölçekte PHP-FPM çalıştıran yüksek performanslı PHP uygulamaları için ideal.
PHP Yapılandırması Sertleştirme
Yürütme modunun ötesinde, PHP kurulumunuzu sertleştirin:
; Disable dangerous functions
disable_functions = exec,passthru,shell_exec,system,proc_open,popen
; Hide PHP version from HTTP headers
expose_php = Off
; Restrict file access
open_basedir = /var/www/yourdomain.com/
; Set reasonable limits
memory_limit = 256M
max_execution_time = 30
upload_max_filesize = 20MSonuç
mod_php, FastCGI ve PHP-FPM arasındaki farkları anlamak sadece akademik bir alıştırma değildir — uygulamanızın performansı, güvenliği ve ölçeklenebilirliği üzerinde doğrudan, ölçülebilir sonuçları vardır.
Özetlemek gerekirse:
- mod_php basit ancak kaynak açısından pahalı, Apache ile sıkı şekilde bağlı ve üretim ortamı için uygun değildir.
- FastCGI PHP’yi web sunucusundan ayırır ve verimliliği artırır, ancak gelişmiş yönetim özelliklerinden yoksundur.
- PHP-FPM modern, üretim sınıfı standarttır — dinamik işlem yönetimi, havuz başına izolasyon, çok sürüm desteği ve eşzamanlı yük altında mükemmel performans sunmaktadır.
Herhangi bir ciddi web uygulaması için, PHP-FPM, Nginx ile eşleştirilmiş (veya LiteSpeed) çalıştırmanız gereken konfigürasyondur. Uygun havuz ayarlaması, PHP sertleştirmesi ve HTTPS zorunluluğu ile birleştirildiğinde, sağlam ve ölçeklenebilir bir PHP barındırma ortamının temelini oluşturur.
Yürütme ortamınız üzerinde tam kontrol ile bir PHP uygulaması dağıtmaya hazırsanız, AlexHost’tan VPS Hosting bu kılavuzda ele alınan her şeyi uygulamak için ihtiyaç duyduğunuz root erişimi, NVMe depolamayı ve DDoS korumasını sağlar — birinci günden itibaren.
*PHP-FPM’i sunucunuzda yapılandırma hakkında sorularınız mı var? Aşağıya bir yorum bırakın veya uzman yardım için AlexHost destek ekibiyle iletişime geçin.*
tasarruf edin