Optimalisasi Nginx Web Server dan PHP-FPM
Pengantar
Kalau kamu menggunakan Web Server VPS, pasti sudah tidak asing dengan Nginx dan PHP-FPM. Nginx terkenal cepat dan ringan untuk menangani banyak koneksi, sementara PHP-FPM adalah FastCGI Process Manager yang mengelola proses PHP di server.
Optimasi keduanya penting karena jika tidak diatur dengan baik, website bisa lambat atau bahkan overload saat trafik tinggi. Artikel ini akan menjelaskan cara kerja Nginx, PHP-FPM, dan bagaimana mengoptimalkannya supaya VPS kamu lebih responsif dan stabil.
Cara Kerja Nginx
Nginx berbeda dari web server tradisional seperti Apache. Nginx menggunakan event-driven architecture, artinya satu proses worker bisa menangani ribuan koneksi secara bersamaan.
Model Request Handling Nginx
- Master Process: Mengontrol worker, membaca konfigurasi, dan reload tanpa downtime.
- Worker Process: Menangani request pengguna, membaca file statis, dan meneruskan request PHP ke PHP-FPM.
- Connection Model: Nginx menggunakan asynchronous I/O, sehingga worker tidak terblokir saat menunggu proses selesai.
Contoh alur request :
- Browser meminta index.php.
- Nginx worker menerima request.
- Request diteruskan ke PHP-FPM.
- PHP-FPM mengeksekusi script dan mengembalikan hasil ke Nginx.
- Nginx mengirim respons ke browser.
Worker Process & Connection
Worker process adalah “otot” Nginx. Semakin banyak worker dan koneksi yang bisa ditangani, semakin baik server menghadapi traffic tinggi.
- Edit konfigurasi Nginx
sudo nano /etc/nginx/nginx.conf-
Output :

- Penjelasan :
worker_processes auto; # Menyesuaikan worker dengan core VPS worker_connections 1024; # Maks koneksi per worker - Cara menghitung kapasitas maksimum:
Max clients = worker_processes * worker_connectionsCatatan : Jika menggunakan VPS 4 core dan worker_processes diset ke auto, server dapat menangani hingga 4096 koneksi secara bersamaan.
-
- Tes konfigurasi & restart Nginx
Gunakan perintah berikut :
sudo nginx -t sudo systemctl restart nginx
Setting Max Upload & Timeout di VirtualHost
Pengaturan Max Upload dan Timeout pada VirtualHost Nginx digunakan untuk mengatur batas ukuran file yang dapat diunggah serta durasi waktu proses koneksi. Setting ini penting untuk mendukung upload file besar atau eksekusi script berat agar tidak terputus di tengah proses.
- Untuk mengaturnya, edit konfigurasi VirtualHost:
- Gunakan Perintah berikut :
sudo nano /etc/nginx/sites-enabled/nama_domain.confOutput :

- Tambahkan konfigurasi berikut:
# Maksimal ukuran upload client client_max_body_size 128M; # Timeout client dan proxy client_body_timeout 360; proxy_read_timeout 360; proxy_connect_timeout 360; proxy_send_timeout 360; - Lalu tes & restart:
sudo nginx -t sudo systemctl restart nginx
- Gunakan Perintah berikut :
Optimasi PHP-FPM Pool
PHP-FPM menggunakan pool untuk mengelola proses PHP. Pool bisa dikonfigurasi agar sesuai CPU & RAM VPS.
- Edit file pool
sudo nano /etc/php/8.1/fpm/pool.d/www.confCatatan : Sesuaikan dengan path versi php yang digunakan;
Output :
- Tambahkan konfigurasi berikut::
pm = dynamic pm.max_children = 20 pm.start_servers = 5 pm.min_spare_servers = 2 pm.max_spare_servers = 10 pm.process_idle_timeout = 10sPenjelasan :
- pm = dynamic : proses PHP menyesuaikan load.
- pm.max_children : maksimal proses PHP simultan.
- pm.start_servers : jumlah proses awal saat FPM start.
- pm.min/max_spare_servers : jumlah proses idle minimum/maksimal.
- Restart PHP-FPM pool
sudo systemctl restart php8.1-fpm
Optimasi PHP (php.ini)
PHP memiliki file konfigurasi php.ini yang mengatur bagaimana PHP bekerja di server. Dengan mengoptimalkan pengaturan ini, kamu bisa meningkatkan performa PHP, mendukung upload file besar, dan mencegah script berat berhenti di tengah jalan.
- Buka file php.ini sesuai versi PHP-FPM yang dipakai:
sudo nano /etc/php/8.1/fpm/php.ini - Tambahkan/ubah:
memory_limit = 128M ; Batas RAM per proses max_input_time = 360 ; Waktu maksimal parsing input (detik) max_execution_time = 360 ; Waktu maksimal eksekusi script upload_max_filesize = 128M ; Ukuran maksimal file upload post_max_size = 128M ; Batas maksimal data POST max_file_uploads = 20 ; Jumlah file upload per requestCatatan : post_max_size harus lebih besar atau sama dengan upload_max_filesize.
Ini hanya mengatur batasan di level PHP, untuk memastikan file diterima dan diproses. Untuk upload besar, juga perlu disesuaikan di Nginx VirtualHost (client_max_body_size) -
Restart PHP-FPM:
sudo systemctl restart php8.1-fpm
Monitoring dan Troubleshooting
Untuk memastikan server PHP berjalan lancar, penting memantau CPU, RAM, dan proses PHP-FPM, lalu melakukan analisis jika terjadi bottleneck.
- Memantau Proses & Resource
- Cek penggunaan CPU & RAM
Gunakan perintah berikut:
htopBaca selengkapnya di artikel Disini
- Cek penggunaan RAM PHP-FPM per proses
ps -eo size,pid,user,command --sort=-size \ | awk '{ hr=$1/1024 ; printf("%13.2f Mb ",hr) } { for (x=4; x<=NF; x++) { printf("%s ",$x) } print "" }' \ | grep php-fpmCatatan : Perintah ini menampilkan proses PHP-FPM terbesar ke terkecil beserta jumlah RAM yang digunakan.
- Cek penggunaan CPU & RAM
- Analisis Bottleneck
- CPU penuh
- Tanda script atau proses terlalu berat.
- Solusi: sesuaikan worker_processes di Nginx atau optimasi script PHP.
- RAM penuh
- PHP-FPM terlalu banyak proses aktif atau script mengonsumsi banyak memori.
- Solusi: turunkan pm.max_children di PHP-FPM dan gunakan caching (OPcache / Redis).
- Script lambat / timeout
- PHP-FPM memproses script terlalu lama.
- Solusi: aktifkan slowlog di PHP-FPM:
slowlog = /var/log/php-fpm/slow.log request_slowlog_timeout = 5sPenjelasan : Slowlog akan mencatat script yang berjalan lebih lama dari timeout, membantu debugging dan optimasi kode.
- CPU penuh
Tips Praktis
- Gunakan worker_processes auto & dynamic PHP-FPM pool.
- Jangan set angka maksimal tanpa melihat kapasitas RAM/CPU.
- Aktifkan OPcache untuk mengurangi eksekusi script PHP.
- Pantau server secara rutin dengan htop & log Nginx/PHP-FPM.
- Terapkan timeout & max upload sesuai kebutuhan website.
Kesimpulan
Dengan memahami cara kerja Nginx dan PHP-FPM, serta mengatur worker_processes, worker_connections, dan PHP-FPM pool sesuai kapasitas VPS, ditambah pengaturan timeout dan max upload, kamu bisa membuat website lebih stabil, cepat, dan siap menghadapi trafik tinggi, sambil memantau CPU, RAM, dan proses PHP untuk mencegah bottleneck dan memastikan performa optimal.


