Mode PHP pada VPS: mod_php vs FastCGI vs PHP-FPM — Panduan Lengkap
PHP menggerakkan lebih dari 80% semua situs web di internet, namun salah satu keputusan kinerja yang paling sering diabaikan adalah memilih mode eksekusi PHP yang tepat. Pilih yang salah dan Anda akan menghadapi waktu muat yang lambat, konsumsi RAM yang berlebihan, dan server crash saat lonjakan traffic. Pilih yang tepat dan aplikasi Anda berkembang dengan mudah, bahkan di bawah beban konkuren yang berat.
Panduan ini menguraikan ketiga mode eksekusi PHP utama — mod_php, FastCGI, dan PHP-FPM — dengan konteks kinerja dunia nyata, contoh konfigurasi, dan rekomendasi jelas untuk berbagai kasus penggunaan. Baik Anda menjalankan blog pribadi atau platform e-commerce dengan traffic tinggi, memahami mode-mode ini adalah fundamental untuk memaksimalkan lingkungan server Anda.
Daftar Isi
- Apa Itu Mode Eksekusi PHP?
- mod_php — Modul Apache Klasik
- FastCGI — Memisahkan PHP dari Web Server
- PHP-FPM — Standar Modern untuk Kinerja Tinggi
- Perbandingan Berdampingan
- Cara Menyiapkan PHP-FPM di VPS (Ubuntu/Debian)
- PHP-FPM dengan Nginx
- PHP-FPM dengan Apache
- Penyesuaian Pool PHP-FPM untuk Produksi
- Mode PHP Mana yang Harus Anda Pilih?
- Kesimpulan
Apa Itu Mode Eksekusi PHP? {#what-are-php-execution-modes}
Sebuah mode eksekusi PHP mendefinisikan bagaimana web server Anda menginterpretasi dan menjalankan skrip PHP. Ini menentukan hubungan antara proses web server (Apache, Nginx, LiteSpeed) dan interpreter PHP — secara khusus, apakah mereka berbagi proses yang sama, berkomunikasi melalui protokol, atau beroperasi sebagai layanan terkelola yang sepenuhnya terpisah.
Tiga mode utama adalah:
| Mode | Arsitektur | Terbaik Untuk |
|---|---|---|
| mod_php | PHP tertanam di Apache | Lingkungan bersama sederhana |
| FastCGI | PHP sebagai proses terpisah | Situs traffic menengah |
| PHP-FPM | Pool proses PHP terkelola | Aplikasi produksi, traffic tinggi |
Memilih mode yang tepat secara langsung mempengaruhi penggunaan memori, throughput permintaan, isolasi, dan skalabilitas. Pada lingkungan VPS Hosting di mana sumber daya didedikasikan dan dapat dikonfigurasi, Anda memiliki kebebasan penuh untuk menerapkan mode mana pun yang paling sesuai dengan beban kerja Anda.
mod_php — Modul Apache Klasik {#mod_php}
Apa Itu mod_php?
mod_php adalah modul Apache yang menanamkan interpreter PHP langsung ke dalam proses web server Apache. Ini adalah metode tertua dan secara historis paling umum untuk menjalankan PHP.
Cara Kerja mod_php
Ketika Apache menerima permintaan untuk file .php, ia menangani eksekusi secara internal — tidak ada proses eksternal yang dihasilkan, tidak ada komunikasi soket yang terjadi. PHP hidup di dalam Apache itu sendiri.
Browser Request → Apache (with embedded PHP) → ResponseKarakteristik Kinerja
Untuk situs dengan traffic rendah dan lingkungan pengembangan, mod_php berkinerja memadai. Karena PHP sudah dimuat ke dalam memori Apache, tidak ada overhead spawning proses per permintaan.
Namun, arsitektur ini memiliki cacat kritis: setiap proses worker Apache membawa interpreter PHP lengkap di memori, terlepas dari apakah itu melayani file PHP atau aset statis seperti gambar atau file CSS.
Kekurangan mod_php
- Konsumsi memori tinggi: Setiap worker Apache (bahkan yang melayani file statis) menyimpan runtime PHP lengkap di RAM.
- Tidak ada isolasi per-situs: Semua virtual host berbagi proses PHP dan konteks pengguna yang sama, yang merupakan masalah keamanan di server multi-tenant.
- Fleksibilitas konfigurasi terbatas: Anda tidak dapat menjalankan versi PHP berbeda untuk virtual host berbeda tanpa workaround signifikan.
- Tidak kompatibel dengan Nginx:
mod_phpeksklusif untuk Apache; tidak dapat digunakan dengan Nginx atau LiteSpeed. - Skalabilitas buruk di bawah beban: Di bawah konkurensi tinggi, kehabisan memori menjadi risiko nyata.
Kapan Menggunakan mod_php
- Lingkungan pengembangan lokal
- Situs pribadi dengan traffic sangat rendah
- Aplikasi legacy di mana rekonfigurasi tidak layak
FastCGI — Memisahkan PHP dari Web Server {#fastcgi}
Apa Itu FastCGI?
FastCGI adalah protokol yang memungkinkan web server berkomunikasi dengan proses PHP eksternal, bukan menanamkan PHP di dalam dirinya sendiri. Ini adalah peningkatan arsitektur yang signifikan dibandingkan mod_php.
Cara Kerja FastCGI
Web server (Apache atau Nginx) meneruskan permintaan PHP ke proses FastCGI yang persisten melalui soket Unix atau port TCP. Proses PHP menangani eksekusi dan mengembalikan hasilnya.
Browser Request → Web Server → FastCGI Socket → PHP Process → ResponseKata kunci di sini adalah persisten: tidak seperti CGI (protokol asli), proses FastCGI tetap hidup antar permintaan, menghilangkan overhead spawning proses baru untuk setiap permintaan.
Karakteristik Kinerja
FastCGI secara signifikan mengurangi overhead memori dibandingkan dengan mod_php karena permintaan file statis ditangani sepenuhnya oleh web server tanpa melibatkan PHP sama sekali. Proses PHP hanya dipanggil ketika benar-benar diperlukan.
Kekurangan FastCGI
- Kompleksitas konfigurasi: Memerlukan setup tambahan dibandingkan dengan
mod_php, termasuk konfigurasi soket atau port. - Manajemen proses terbatas: FastCGI dasar kekurangan fitur manajemen pool canggih yang diperlukan untuk lingkungan produksi.
- Digantikan oleh PHP-FPM: Dalam sebagian besar deployment modern, PHP-FPM (yang dibangun di atas FastCGI) lebih disukai daripada implementasi FastCGI dasar.
Kapan Menggunakan FastCGI
- Situs dengan traffic menengah
- Lingkungan di mana PHP-FPM tidak tersedia
- Setup transisional yang bermigrasi dari
mod_php
PHP-FPM — Standar Modern untuk Kinerja Tinggi {#php-fpm}
Apa Itu PHP-FPM?
PHP-FPM (FastCGI Process Manager) adalah implementasi protokol FastCGI yang canggih dan kaya fitur. Ini adalah standar de facto untuk menjalankan PHP di lingkungan produksi dan adalah mode yang direkomendasikan untuk aplikasi web serius apa pun.
Cara Kerja PHP-FPM
PHP-FPM mengelola pool proses worker PHP. Web server meneruskan permintaan PHP ke PHP-FPM melalui soket Unix atau koneksi TCP. PHP-FPM secara dinamis mengelola jumlah proses worker aktif berdasarkan traffic saat ini, menjalankan worker baru di bawah beban dan melepaskannya selama periode sepi.
Browser Request → Nginx/Apache → Unix Socket → PHP-FPM Pool → PHP Worker → ResponseKeuntungan Utama PHP-FPM
#### 1. Manajemen Proses Dinamis
PHP-FPM mendukung berbagai strategi manajemen proses:
- static: Jumlah proses worker tetap (dapat diprediksi, baik untuk traffic tinggi)
- dynamic: Worker berkembang antara minimum dan maksimum berdasarkan permintaan
- ondemand: Worker dihasilkan hanya ketika permintaan tiba (efisien memori untuk traffic rendah)
#### 2. Konfigurasi Per-Pool
Setiap aplikasi atau virtual host dapat memiliki pool PHP-FPM sendiri dengan pengaturan independen:
- Pengguna/grup Unix terpisah (isolasi keamanan yang ditingkatkan)
- Versi PHP berbeda per pool
- Nilai
php.inikustom per aplikasi - Batas sumber daya individual
#### 3. Logging Permintaan Lambat
PHP-FPM dapat mencatat permintaan yang melebihi ambang waktu eksekusi yang ditentukan, menjadikannya sangat berharga untuk mengidentifikasi bottleneck kinerja.
#### 4. Efisiensi Sumber Daya
Karena proses PHP dikelola secara terpisah dari web server, aset statis disajikan tanpa overhead PHP apa pun. Memori hanya dikonsumsi oleh worker PHP aktif.
#### 5. Kompatibilitas
PHP-FPM bekerja dengan mulus dengan Nginx, Apache (melalui mod_proxy_fcgi), dan LiteSpeed. Ketika dikombinasikan dengan Nginx atau LiteSpeed, keuntungan kinerja sangat besar — sering dikutip 5–10x lebih cepat di bawah beban konkuren dibandingkan dengan mod_php dengan Apache.
Perbandingan Berdampingan {#comparison}
| Fitur | mod_php | FastCGI | PHP-FPM |
|---|---|---|---|
| Arsitektur | Tertanam di Apache | Proses eksternal | Pool proses terkelola |
| Efisiensi memori | Rendah | Menengah | Tinggi |
| Overhead file statis | Tinggi | Rendah | Rendah |
| Penanganan permintaan konkuren | Buruk | Baik | Sangat Baik |
| Versi PHP per-situs | Tidak | Terbatas | Ya |
| Isolasi keamanan | Buruk | Menengah | Sangat Baik |
| Kompatibilitas Nginx | Tidak | Ya | Ya |
| Kompleksitas konfigurasi | Rendah | Menengah | Menengah |
| Kesiapan produksi | Tidak | Sebagian | Ya |
| Logging permintaan lambat | Tidak | Tidak | Ya |
Cara Menyiapkan PHP-FPM di VPS (Ubuntu/Debian) {#setup}
Instruksi berikut berlaku untuk Ubuntu 22.04 LTS dan Debian 11/12. Jika Anda menjalankan aplikasi Anda di paket VPS Hosting, Anda akan memiliki akses root penuh untuk menjalankan perintah ini.
Langkah 1: Perbarui Sistem Anda dan Instal PHP-FPM
sudo apt update && sudo apt upgrade -y
sudo apt install php-fpm -yUntuk menginstal versi PHP tertentu (misalnya, 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 -yLangkah 2: Verifikasi PHP-FPM Berjalan
sudo systemctl status php8.2-fpmAnda harus melihat active (running) dalam output. Jika tidak, mulai dan aktifkan:
sudo systemctl start php8.2-fpm
sudo systemctl enable php8.2-fpmLangkah 3: Konfirmasi Jalur Soket
PHP-FPM berkomunikasi melalui soket Unix. Verifikasi lokasinya:
ls /var/run/php/
# Expected output: php8.2-fpm.sockPHP-FPM dengan Nginx {#nginx}
Nginx adalah web server paling umum yang dipasangkan dengan PHP-FPM, dan dengan alasan yang baik — arsitektur event-driven dan non-blocking Nginx melengkapi model pool proses PHP-FPM dengan sempurna.
Instal Nginx
sudo apt install nginx -yKonfigurasi Blok Server Nginx
Edit file konfigurasi situs Anda:
sudo nano /etc/nginx/sites-available/yourdomain.comTambahkan konfigurasi berikut:
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";
}
}Aktifkan Situs dan Restart Nginx
sudo ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginxPHP-FPM dengan Apache {#apache}
Jika Anda lebih suka Apache — atau jika aplikasi Anda bergantung pada file .htaccess — Anda masih dapat menggunakan PHP-FPM melalui modul mod_proxy_fcgi Apache.
Aktifkan Modul Apache yang Diperlukan
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php8.2-fpmKonfigurasi Virtual Host Apache
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>Aktifkan Situs dan Restart Apache
sudo a2ensite yourdomain.com.conf
sudo apache2ctl configtest
sudo systemctl restart apache2Penyesuaian Pool PHP-FPM untuk Produksi {#tuning}
Konfigurasi pool PHP-FPM default bersifat konservatif dan cocok untuk pengembangan. Untuk beban kerja produksi, Anda harus menyesuaikan pengaturan pool berdasarkan RAM server yang tersedia dan traffic yang diharapkan.
Temukan File Konfigurasi Pool
sudo nano /etc/php/8.2/fpm/pool.d/www.confParameter Kunci untuk Disesuaikan
; 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.logMenghitung pm.max_children
Formula praktis untuk lingkungan dinamis:
pm.max_children = (Available RAM in MB) / (Average PHP process size in MB)Untuk menemukan ukuran proses PHP rata-rata:
ps --no-headers -o "rss,cmd" -C php-fpm8.2 | awk '{ sum+=$1 } END { printf "%.0f MBn", sum/NR/1024 }'Di situs WordPress tipikal, setiap worker PHP-FPM mengonsumsi sekitar 30–60 MB. Di VPS dengan 2 GB RAM (meninggalkan ~1,5 GB untuk PHP setelah overhead OS), Anda dapat dengan aman menjalankan 25–50 worker.
Terapkan Perubahan
sudo systemctl reload php8.2-fpmMode PHP Mana yang Harus Anda Pilih? {#which-to-choose}
Berikut adalah panduan keputusan praktis:
Pilih mod_php jika:
- Anda menjalankan lingkungan pengembangan lokal
- Anda memiliki situs statis dengan traffic sangat rendah yang sederhana
- Anda berada di shared hosting legacy tanpa opsi lain
Pilih FastCGI jika:
- Anda berada di situs traffic menengah dan PHP-FPM tidak tersedia
- Anda bermigrasi dari
mod_phpdan memerlukan langkah perantara
Pilih PHP-FPM jika:
- Anda menjalankan aplikasi produksi apa pun
- Anda perlu mendukung versi PHP berbeda di server yang sama
- Anda menjalankan WordPress, Laravel, Symfony, Magento, atau framework PHP modern apa pun
- Anda menginginkan isolasi keamanan per-aplikasi
- Anda menggunakan Nginx (PHP-FPM adalah satu-satunya opsi yang layak)
- Anda memerlukan skalabilitas di bawah traffic konkuren
Untuk sebagian besar kasus penggunaan produksi, PHP-FPM adalah pemenang yang jelas. Ini adalah konfigurasi standar di platform hosting terkelola modern, dan ini adalah apa yang harus Anda jalankan di VPS yang dikelola sendiri apa pun.
Jika Anda mengelola beberapa situs web dan menginginkan antarmuka grafis untuk menangani switching mode PHP, manajemen pool proses, dan konfigurasi virtual host tanpa mengedit file config secara manual, pertimbangkan VPS dengan cPanel — EasyApache 4 cPanel memungkinkan Anda beralih handler PHP per domain dengan beberapa klik.
Atau
