Gambaran umum: MPM Event memungkinkan Apache menangani koneksi Keep-Alive dengan jauh lebih efisien dibanding modul Apache lama. Setelah Apache selesai mengirim respons, worker thread tidak akan terus menunggu koneksi idle. Sebaliknya, koneksi tersebut dipindahkan ke event-loop yang ringan, sehingga worker thread bisa segera digantikan untuk melayani pengguna lain. Proses ini membuat server mampu menangani banyak koneksi bersamaan tanpa menghabiskan thread atau RAM yang berlebihan.
Di sisi PHP-FPM, setiap permintaan PHP akan diproses oleh salah satu worker PHP yang sedang idle. PHP-FPM memiliki manajemen proses yang cerdas: ia bisa menambah atau mengurangi jumlah proses sesuai kebutuhan traffic. Setelah skrip PHP selesai dijalankan, hasilnya dikirim kembali ke Apache, dan kemudian Apache mengembalikannya ke browser. Pemisahan peran yang jelas antara Apache dan PHP-FPM ini membuat sistem lebih stabil, terkontrol, dan tidak mudah melambat meskipun beban server meningkat.
Dengan arsitektur seperti ini, kombinasi Apache MPM Event dan PHP-FPM mampu memberikan respons cepat, efisiensi yang tinggi, serta stabilitas dalam jangka panjang. Apache bergerak cepat mengelola request HTTP dan koneksi, sementara PHP-FPM memastikan pemrosesan PHP dilakukan secara optimal tanpa mengganggu performa web server. Ini adalah konfigurasi yang sangat ideal untuk website modern, baik WordPress, Laravel, maupun aplikasi web besar lainnya.
Cara Migrasi dari Apache Prefork + mod_php ke Apache MPM Event + PHP-FPM adalah langkah terbaik untuk meningkatkan performa server PHP modern. Arsitektur ini lebih cepat, stabil, dan jauh lebih hemat RAM, cocok untuk WordPress, CodeIgniter, Laravel, dan aplikasi PHP lain.
contoh spesifikasi server RAM 8 Gb 4 Core || Os Linux ubuntu.
Kasus ini menggunakan PHP 7.4, namun semua langkah dapat disesuaikan untuk PHP versi 8.xx. Panduan ini menjelaskan langkah migrasi lengkap, optimasi Apache, konfigurasi PHP-FPM, serta FAQ error yang sering muncul.
Contents
- 1 1. Keuntungan Migrasi ke PHP-FPM + MPM Event
- 2 2. Instal & Aktifkan PHP-FPM
- 3 3. Matikan mod_php (WAJIB)
- 4 4. Aktifkan MPM Event + Modul Proxy FCGI
- 5 5. Konfigurasi VirtualHost untuk PHP-FPM
- 6 6. Optimasi Apache MPM Event (Sangat penting)
- 7 7. Pindahkan Semua php_value ke PHP-FPM
- 8 8. Restart Service Setelah Migrasi
- 9 9. Cek Pemakaian RAM Apache & PHP-FPM
- 10 FAQs : Error yang terjadi
- 11 Kesimpulan
1. Keuntungan Migrasi ke PHP-FPM + MPM Event
🔥 Performa Lebih Cepat
Apache Event lebih efisien menangani koneksi Keep-Alive.
🧠 RAM Lebih Hemat
mod_php membuat setiap worker Apache berisi PHP → boros RAM.
Dengan PHP-FPM, PHP dipisah ke proses tersendiri.
🛡 Stabil Untuk High Traffic
Event MPM jauh lebih stabil daripada Prefork.
🚀 Cocok Semua Aplikasi
WordPress, CI3, Laravel, OpenCart, dsb → semuanya kompatibel.
2. Instal & Aktifkan PHP-FPM
Sebelum install cek status mode apache2 :
apachectl -V | grep MPM
Jika hasilnya: prefork , Artinya perlu dimigrasi ke php-fpm mode event.
sudo apt install php7.4-fpm
Cek status:
systemctl status php7.4-fpm
3. Matikan mod_php (WAJIB)
sudo a2dismod php7.4
4. Aktifkan MPM Event + Modul Proxy FCGI
sudo a2dismod mpm_prefork
sudo a2enmod mpm_event
sudo a2enmod proxy_fcgi setenvif
Berikut penjelasan dari setiap perintah tersebut dalam konteks konfigurasi Apache di sistem berbasis Debian/Ubuntu:
1. sudo a2dismod mpm_prefork
-
a2dismod = Apache2 disable module
-
Perintah ini menonaktifkan modul MPM Prefork.
-
MPM Prefork adalah model proses lama yang tidak mendukung threading dan sering digunakan bersama mod_php (PHP Apache handler).
-
Dinonaktifkan biasanya ketika ingin menggunakan PHP-FPM atau modul MPM lain.
2. sudo a2enmod mpm_event
-
a2enmod = Apache2 enable module
-
Mengaktifkan MPM Event, yaitu modul Multi-Processing Module yang lebih modern dan efisien.
-
MPM Event mendukung threading dan lebih optimal untuk server dengan lalu lintas tinggi.
-
Biasa dipakai ketika Apache diintegrasikan dengan PHP-FPM.
3. sudo a2enmod proxy_fcgi setenvif
-
Mengaktifkan dua modul sekaligus:
a. proxy_fcgi
-
Modul ini memungkinkan Apache meneruskan (proxy) request ke PHP-FPM melalui protokol FastCGI.
-
Diperlukan jika menggunakan PHP-FPM, bukan mod_php.
b. setenvif
-
Modul untuk mengatur dan memodifikasi environment variables berdasarkan kondisi request (misalnya User-Agent tertentu).
Restart Apache:
sudo systemctl restart apache2
5. Konfigurasi VirtualHost untuk PHP-FPM
Tambahkan pada setiap file .conf domain. lokasi file: /etc/apache2/sites-available/domain.conf
Non-SSL
<FilesMatch "\.php$">
SetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost/"
</FilesMatch>
SSL
<VirtualHost *:443>
SSLEngine On
SSLCertificateFile /path/cert.pem
SSLCertificateKeyFile /path/key.pem
DocumentRoot /var/www/domain.com
<FilesMatch "\.php$">
SetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost/"
</FilesMatch>
</VirtualHost>
6. Optimasi Apache MPM Event (Sangat penting)
Edit file:
/etc/apache2/mods-available/mpm_event.conf
Gunakan konfigurasi optimal server 4–8 GB RAM:
<IfModule mpm_event_module>
ServerLimit 10
StartServers 3
MinSpareThreads 50
MaxSpareThreads 150
ThreadLimit 64
ThreadsPerChild 25
MaxRequestWorkers 250
MaxConnectionsPerChild 1500
</IfModule>
Penjelasan Penting:
| PARAMETER | FUNGSI |
|---|---|
| ThreadsPerChild | Worker per proses |
| MaxRequestWorkers | Batas maksimal request bersamaan |
| MaxConnectionsPerChild | Restart per proses untuk menghindari memory leak |
ket:
ServerLimit 10
-
Wajib ditentukan jika menaikkan MaxRequestWorkers.
-
10 proses worker adalah nilai aman untuk RAM 4–8 GB.
StartServers 3
-
Tidak terlalu kecil (agar startup cepat), tidak terlalu besar (hemat RAM).
MinSpareThreads 50 & MaxSpareThreads 150
-
Menambah jumlah idle thread agar respons lebih cepat saat terjadi lonjakan trafik.
-
Server 4–8 GB mampu menahan idle thread lebih banyak tanpa tekanan memori.
ThreadsPerChild 25
-
Angka 25 adalah sweet spot untuk kestabilan MPM Event.
MaxRequestWorkers 250
-
Default kamu sebelumnya hanya 150, cukup kecil untuk server 8 GB.
-
Dengan konfigurasi baru:
-
Dengan RAM 4–8 GB, 250 worker masih aman, terutama jika memakai PHP-FPM.
MaxConnectionsPerChild 1500
-
Proses worker akan di-restart otomatis setelah 1500 koneksi.
-
Mencegah memory leak pada modul-modul Apache.
-
Nilai ini cukup tinggi untuk efisiensi, tapi masih aman untuk kestabilan.
Dengan PHP-FPM, Apache jadi sangat ringan → RAM tetap aman meski banyak koneksi.
7. Pindahkan Semua php_value ke PHP-FPM
File .htaccess tidak boleh lagi menggunakan:
php_value ...
php_flag ...
Pindahkan ke & buat file:
sudo cp /etc/php/7.4/fpm/pool.d/www.conf /etc/php/7.4/fpm/pool.d/www.conf.bak
nano /etc/php/7.4/fpm/pool.d/www.conf
Contoh konfigurasi lengkap:
[www]
user = www-data
group = www-data
listen = /run/php/php7.4-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
pm = dynamic
pm.max_children = 80
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
;=======================
php_admin_value[upload_max_filesize] = 800M
php_admin_value[post_max_size] = 800M
php_admin_value[memory_limit] = 512M
php_admin_value[max_execution_time] = 9200
php_admin_value[max_input_time] = 9200
php_admin_value[session.gc_maxlifetime] = 2592000
; OPcache
php_admin_value[opcache.enable] = 1
php_admin_value[opcache.memory_consumption] = 256
php_admin_value[opcache.interned_strings_buffer] = 16
php_admin_value[opcache.max_accelerated_files] = 40000
php_admin_value[opcache.validate_timestamps] = 1
Ket:
pm = dynamic
Mode ini membuat PHP-FPM secara otomatis menambah atau mengurangi jumlah proses worker sesuai kebutuhan. Cocok untuk web server dengan trafik yang bervariasi.
pm.max_children = 80
Jumlah maksimal proses PHP-FPM yang boleh berjalan sekaligus. Ini adalah batas tertinggi. Jika sudah mencapai 20 proses dan semua sibuk, request tambahan akan menunggu (queue). Nilai ini paling penting karena mempengaruhi performa dan penggunaan RAM.
pm.start_servers = 10
Jumlah proses worker yang langsung dibuat saat PHP-FPM mulai berjalan. Dengan ini, PHP-FPM memulai dengan 5 proses siap menerima request.
pm.min_spare_servers = 5
Jumlah minimal proses idle (menganggur) yang harus tersedia. Jika idle kurang dari 2, PHP-FPM akan membuat proses baru untuk menjaga respons cepat.
pm.max_spare_servers = 20
Jumlah maksimal proses idle. Jika idle melebihi 10, PHP-FPM akan menghapus proses yang tidak terpakai untuk menghemat RAM.
Kalau kamu berikan spesifikasi RAM server dan jenis website, saya bisa bantu hitung nilai ideal untuk pm.max_children supaya performanya optimal dan tidak kehabisan memori.
8. Restart Service Setelah Migrasi
Perintah restart lengkap:
sudo systemctl restart php7.4-fpm
sudo systemctl restart apache2
Periksa error:
sudo systemctl status php7.4-fpm
sudo journalctl -xe
9. Cek Pemakaian RAM Apache & PHP-FPM
Apache:
ps -C apache2 -o pid,rss | awk 'NR>1 {sum+=$2} END {print "Apache RAM:", sum/1024, "MB"}'
PHP-FPM:
ps -C php-fpm7.4 -o pid,rss | awk 'NR>1 {sum+=$2} END {print "PHP-FPM RAM:", sum/1024, "MB"}'
Contoh hasil real:
- Apache: ± 40 MB
- PHP-FPM: ± 470 MB
- Sebelumnya Prefork bisa: 3–4 GB untuk hanya 10 worker
Server jauh lebih efisien.
FAQs : Error yang terjadi
❓ 1. Error 500: Invalid command ‘php_value’
PHP-FPM tidak menerima php_value di .htaccess.
Solusi: Pindahkan ke www.conf.
Penyebab: PHP-FPM sibuk / mati / permission socket salah.
ls -l /run/php/php7.4-fpm.sock
Jika bukan www-data, tambahkan di www.conf:
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
❓ 3. Error: pm.max_children reached
PHP-FPM kehabisan worker.
pm.max_children = 30
❓ 4. WordPress menampilkan file .php sebagai teks
Artinya SetHandler hilang atau tidak aktif.
<FilesMatch "\.php$">
SetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost/"
</FilesMatch>
❓ 5. Apache RAM hanya 40 MB, apakah aman?
Aman. Apache hanya menangani HTTP, bukan PHP.
❓ 6. Aman untuk WordPress + CI3 + Laravel?
Sangat aman. OPcache bahkan meningkatkan performa.
Kesimpulan
Migrasi ke:
- ✔ Apache MPM Event
- ✔ PHP-FPM
- ✔ OPcache
Memberikan hasil:
- ⚡ Performa website jauh lebih cepat
- 🧠 Pemakaian RAM jauh lebih kecil
- 🛡 Stabil saat trafik tinggi
- 🔧 Mudah diatur dan scalable
Ini adalah konfigurasi modern terbaik untuk server PHP.