Optimasi Nginx dan PHP untuk Gambar

Pada artikel kali ini saya ingin membagikan pengalaman saya dalam optimasi server dan website. Website ini berisi banyak gambar karena saya membagi pengalaman saya melalui screenshot, sehingga yang membaca lebih memahami dan melihat ilustrasi yang sedang saya jelaskan. Saya kira ini karena WordPress belum install plugin untuk caching gambar, namun setelah saya install plugin malah tambah berat untuk VPS mini ini, ternyata bottleneck justru ada di:

  • Nginx
  • PHP

Masalah yang saya temui:

  • Load lambat saat buka halaman
  • Server terasa berat
  • Kadang spike CPU saat banyak request gambar

Setelah saya optimasi di level Nginx dan PHP, hasilnya cukup signifikan. Sebenarnya ini tidak hanya untuk kasus WordPress, bisa untuk kasus apapun yang melibatkan gambar


Teori Singkat

Saat user buka halaman:

  1. Browser request HTML
  2. Lalu request gambar
  3. Server harus handle request tersebut

Kalau tidak dioptimasi:

  • Request jadi berat
  • Response lama
  • Server cepat overload

Fokus optimasi yang saya lakukan:

  • caching (Nginx)
  • handling request (Nginx)
  • resource limit (PHP)

1. Optimasi Nginx untuk Gambar

Edit config:

# nano /etc/nginx/nginx.conf

Aktifkan sendfile dan tcp optimization

Tambahkan / pastikan ada:

sendfile on;
tcp_nopush on;
tcp_nodelay on;


Penjelasan

  • sendfile → kirim file langsung dari disk (lebih cepat)
  • tcp_nopush → optimasi pengiriman data besar
  • tcp_nodelay → kurangi delay kecil

2. Aktifkan Gzip Compression

Tambahkan atau uncomment:

gzip on;
gzip_comp_level 5;
gzip_min_length 256;
gzip_types
     text/plain
     text/css
     application/json
     application/javascript
     text/xml
     application/xml
     image/svg+xml;


Penjelasan

  • Tidak semua gambar dikompres (JPG/PNG sudah compressed)
  • Tapi SVG, CSS, JS tetap penting

3. Browser Cache (Wajib)

Edit config site:

nano /etc/nginx/sites-available/(wordpress)

catatan: ganti (wordpress) dengan direktori yang kalian punya

Tambahkan:

location ~* \.(jpg|jpeg|png|gif|webp|svg)$ {
    expires 30d;
    add_header Cache-Control "public, max-age=2592000";
    access_log off;
}


Penjelasan

  • File gambar disimpan di browser 30 hari
  • Mengurangi request ke server
  • access_log off → hemat disk I/O

4. Limit Request untuk Gambar

Masih di config nginx:

limit_req_zone $binary_remote_addr zone=imglimit:10m rate=10r/s;

server {
    location ~* \.(jpg|jpeg|png|gif|webp)$ {
        limit_req zone=imglimit burst=20;
    }
}

Penjelasan

  • Mencegah spam request gambar
  • Berguna untuk anti abuse / bot

5. Test dan Reload Nginx

nginx -t

Output:


Kemudian reload nginx:

# systemctl reload nginx

6. Optimasi PHP untuk WordPress

Walaupun gambar dilayani oleh Nginx, PHP tetap berperan saat:

  • upload gambar
  • generate thumbnail
  • processing media

Edit php.ini

nano /etc/php/8.3/fpm/php.ini

Ubah:

memory_limit = 128M
upload_max_filesize = 2M
post_max_size = 12M
max_execution_time = 120

Penjelasan

  • memory_limit → penting saat generate thumbnail
  • upload_max_filesize → batasi upload user
  • max_execution_time → hindari timeout saat proses gambar

7. Optimasi PHP-FPM Pool

Edit:

nano /etc/php/8.3/fpm/pool.d/www.conf

Ubah:

pm = dynamic
pm.max_children = 10
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 5

Penjelasan

  • Menyesuaikan dengan RAM 1GB
  • Mencegah over usage

Restart PHP

systemctl restart php8.3-fpm

8. Hasilnya Setelah Optimasi

  • Load gambar lebih cepat
  • Server lebih stabil
  • CPU tidak mudah spike

Tips Tambahan

  • Jangan log request gambar terlalu detail
  • Gunakan cache semaksimal mungkin
  • Hindari proses berat di PHP untuk gambar

Kesimpulan

Optimasi gambar bukan hanya soal file, tapi juga server.

Nginx:

  • handle request
  • caching
  • limit traffic

PHP:

  • handle upload
  • processing
  • resource control

Kalau dua ini dioptimasi, performa WordPress bisa naik signifikan tanpa upgrade server.


Akhir kata Rafi

Sering kali orang fokus ke plugin WordPress, padahal bottleneck ada di server. Dengan tuning sederhana di Nginx dan PHP, performa bisa jauh lebih stabil dan cepat.

Bisa dikembangkan lagi:

  • tuning worker_process nginx
  • setup fastcgi cache
  • integrasi CDN

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *