PHP-FPM: situs PHP
Instalasi PHP-FPM di VDS, integrasinya dengan Nginx, memilih jumlah proses untuk memori tier Anda, dan troubleshooting error 502 dan 504.
Diperbarui 23 Agustus 2026
PHP-FPM adalah layanan terpisah yang menjalankan kode PHP; web server hanya meneruskan permintaan kepadanya. Beginilah cara kerja WordPress, Laravel, Bitrix, dan hampir semua hal lain yang berbasis PHP.
Instalasi
apt update
apt install -y php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip
systemctl enable --now php8.3-fpm
Di AlmaLinux dan CentOS Stream, gunakan dnf install -y php-fpm php-mysqlnd ...; layanannya bernama php-fpm. Untuk memeriksa versi persisnya, jalankan:
php -v
systemctl list-units | grep fpm
Menghubungkan ke Nginx
server {
listen 80;
server_name example.ru;
root /var/www/example.ru/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location ~ /\.(?!well-known) { deny all; }
}
nginx -t && systemctl reload nginx
echo '<?php phpinfo();' > /var/www/example.ru/public/info.php
Buka /info.php, pastikan PHP berfungsi, lalu segera hapus file tersebut: file itu menampilkan versi, path, dan daftar modul.
Berapa banyak proses yang perlu dijaga
Setiap proses worker PHP memakan 40–120 MB. Sesuaikan ukurannya berdasarkan tier, sisakan memori untuk database dan sistem. Ini dikonfigurasi di /etc/php/8.3/fpm/pool.d/www.conf:
| Tier | Memori | pm.max_children yang wajar |
|---|---|---|
| VDS-1 | 2 GB | 5 |
| VDS-2 | 4 GB | 10 |
| VDS-3 | 8 GB | 20 |
| VDS-5 | 24 GB | 60 |
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 2
pm.max_spare_servers = 4
pm.max_requests = 500
pm.max_requests memulai ulang proses setelah N permintaan, sehingga kebocoran memori pada kode tidak menumpuk sampai akhir pekan.
Nilai php.ini yang berguna untuk FPM: memory_limit = 256M, upload_max_filesize = 64M, post_max_size = 64M, opcache.enable = 1.
Setelah melakukan perubahan: systemctl reload php8.3-fpm.
Kesalahan umum
| Gejala | Penyebab | Yang harus dilakukan |
|---|---|---|
502 Bad Gateway | Path socket salah atau layanannya tidak berjalan | Periksa fastcgi_pass terhadap file yang sebenarnya ada di /run/php/ |
504 Gateway Time-out | Skrip berjalan lebih lama dari timeout | Naikkan fastcgi_read_timeout dan max_execution_time |
| Browser mengunduh file alih-alih menjalankannya | Blok location ~ \.php$ tidak cocok | Periksa urutan blok location dan jalankan nginx -t |
server reached pm.max_children di log | Proses tidak cukup | Naikkan batasnya jika memori memungkinkan, jika tidak pindah ke tier yang lebih tinggi |
Log: /var/log/php8.3-fpm.log dan /var/log/nginx/error.log.
Buat database situs di bawah pengguna terpisah dengan hak hanya ke skemanya sendiri — pengguna dan grant. Menggunakan akun
rootdi konfigurasi CMS Anda adalah jalan langsung menuju kehilangan semua database Anda sekaligus.