Optimalisasi Nginx Web Server dan PHP-FPM

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 :

  1. Browser meminta index.php.
  2. Nginx worker menerima request.
  3. Request diteruskan ke PHP-FPM.
  4. PHP-FPM mengeksekusi script dan mengembalikan hasil ke Nginx.
  5. 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.

  1. 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_connections
      
      Catatan : Jika menggunakan VPS 4 core dan worker_processes diset ke auto, server dapat menangani hingga 4096 koneksi secara bersamaan.
  2. 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.

  1. Untuk mengaturnya, edit konfigurasi VirtualHost:
    • Gunakan Perintah berikut :
      sudo nano /etc/nginx/sites-enabled/nama_domain.conf
      

      Output :

    • 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
      

Optimasi PHP-FPM Pool

PHP-FPM menggunakan pool untuk mengelola proses PHP. Pool bisa dikonfigurasi agar sesuai CPU & RAM VPS.

  1. Edit file pool
    sudo nano /etc/php/8.1/fpm/pool.d/www.conf
    
    Catatan : Sesuaikan dengan path versi php yang digunakan;
    Output :

  2. 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 = 10s
    

    Penjelasan :

    1. pm = dynamic  : proses PHP menyesuaikan load.
    2. pm.max_children : maksimal proses PHP simultan.
    3. pm.start_servers : jumlah proses awal saat FPM start.
    4. pm.min/max_spare_servers : jumlah proses idle minimum/maksimal.
  3. 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.

  1. Buka file php.ini sesuai versi PHP-FPM yang dipakai:
    sudo nano /etc/php/8.1/fpm/php.ini
    
  2. 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 request
    
    Catatan : 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)
  3. 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.

  1. Memantau Proses & Resource
    • Cek penggunaan CPU & RAM
      Gunakan perintah berikut:
      htop
      

      Baca 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-fpm
      
      Catatan : Perintah ini menampilkan proses PHP-FPM terbesar ke terkecil beserta jumlah RAM yang digunakan.
  2. Analisis Bottleneck
    1. CPU penuh
      • Tanda script atau proses terlalu berat.
      •  Solusi: sesuaikan worker_processes di Nginx atau optimasi script PHP.
    2. 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).
    3. 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 = 5s
        
        Penjelasan : Slowlog akan mencatat script yang berjalan lebih lama dari timeout, membantu debugging dan optimasi kode.

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.


Artikel Lain

WhatsApp Kami

Support : +6282138153600

Admin Finance : +6285191239466