Cara Kerja PHP-FPM: Arsitektur, Proses, dan Konfigurasi

PHP-FPM (FastCGI Process Manager) adalah alternatif implementasi PHP FastCGI yang menyediakan fitur tambahan yang berguna untuk situs web dengan lalu lintas tinggi. PHP-FPM bekerja dengan memisahkan server web (seperti Nginx atau Apache) dari proses eksekusi skrip PHP, menggunakan model manajemen proses master dan worker untuk menangani permintaan secara efisien.

Secara mendasar, ketika pengguna mengakses halaman web berbasis PHP melalui browser, server web menerima permintaan tersebut. Jika file tersebut berformat .php, server web tidak memprosesnya sendiri, melainkan meneruskannya ke PHP-FPM melalui protokol FastCGI (baik melalui soket Unix maupun TCP/IP). Proses master PHP-FPM kemudian mendistribusikan permintaan ini ke proses worker yang tersedia untuk dieksekusi, lalu hasilnya dikembalikan ke server web untuk ditampilkan kepada pengguna.

Arsitektur dan Komponen PHP-FPM

PHP-FPM menggunakan arsitektur Master-Worker. Proses master bertanggung jawab untuk mendengarkan permintaan dari server web dan mengelola proses worker. Sementara itu, proses worker adalah proses mandiri yang benar-benar mengeksekusi kode PHP.

Komponen Fungsi Utama Keterangan
Master Process Mengelola siklus hidup proses worker dan membaca file konfigurasi. Berjalan di latar belakang dengan hak akses sistem yang ditentukan.
Worker Process (Child) Mengeksekusi skrip PHP dan berinteraksi dengan database/file system. Jumlahnya diatur oleh manajer proses (dynamic, static, ondemand).
Socket / Port Jalur komunikasi antara Web Server (Nginx/Apache) dengan PHP-FPM. Bisa menggunakan Unix Domain Socket (lebih cepat) atau TCP/IP (antar server).

Mode Manajemen Proses PHP-FPM

PHP-FPM menyediakan tiga mode manajemen proses yang dapat disesuaikan dengan kapasitas server:

  • Static: Jumlah proses worker yang berjalan selalu tetap (konstan), ditentukan oleh parameter pm.max_children. Cocok untuk server dengan trafik tinggi dan stabil.
  • Dynamic: Jumlah proses worker disesuaikan secara dinamis berdasarkan beban. Terdapat proses minimum dan maksimum yang diatur melalui konfigurasi.
  • Ondemand: Proses worker tidak dibuat saat server menyala, melainkan hanya dibuat ketika ada permintaan masuk (on demand). Proses akan dimatikan jika tidak ada aktivitas dalam waktu tertentu (pm.process_idle_timeout).

Contoh Konfigurasi Pool PHP-FPM

Konfigurasi pool PHP-FPM biasanya terletak di direktori /etc/php/{versi}/fpm/pool.d/www.conf. Berikut adalah contoh blok konfigurasi dasar untuk manajemen proses:

[www]
user = www-data
group = www-data
listen = /run/php/php8.2-fpm.sock
listen.owner = www-data
listen.group = www-data

pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500

Langkah-Langkah Alur Eksekusi Permintaan

  1. Klien mengirimkan HTTP request ke Nginx untuk mengakses file index.php.
  2. Nginx membaca blok konfigurasi lokasi dan mendeteksi ekstensi .php.
  3. Nginx meneruskan parameter lingkungan dan data permintaan ke PHP-FPM melalui Unix Socket (misal: /run/php/php-fpm.sock).
  4. Proses master PHP-FPM menerima koneksi dan menyerahkannya ke salah satu worker yang sedang menganggur (idle).
  5. Worker mengeksekusi skrip PHP, menghasilkan output HTML/JSON, dan menutup eksekusi.
  6. PHP-FPM mengirimkan kembali hasil eksekusi ke Nginx.
  7. Nginx mengirimkan respons HTTP kepada browser klien.

Troubleshooting Umum PHP-FPM

Masalah yang sering terjadi pada lingkungan produksi adalah kehabisan proses worker yang ditandai dengan pesan 502 Bad Gateway pada Nginx. Hal ini terjadi karena seluruh proses worker sedang sibuk menangani permintaan yang lambat (misalnya karena kueri database yang berat). Solusinya adalah mengoptimalkan kode PHP, menaikkan nilai pm.max_children jika kapasitas RAM mencukupi, atau menerapkan sistem antrian (queue) untuk tugas berat.