Kembali ke Insights
Optimasi Server & Cloud7 Menit Membaca

Mengamankan VPS Ubuntu: Menjinakkan Lonjakan Trafik dengan Konfigurasi Nginx dan PM2 Agar Aplikasi Ujian Tidak Crash

KI

Oleh Lead Technical Specialist

Dipublikasikan pada: 3 Mei 2026

Ujian online berbasis web (CBT) adalah salah satu jenis sistem aplikasi yang paling rakus akan sumber daya server. Berbeda dengan website portofolio atau portal berita di mana user datang secara bertahap dan melakukan navigasi santai, sistem ujian online menuntut ribuan siswa atau peserta untuk mengirimkan request transaksi data dalam hitungan detik yang benar-benar bersamaan (concurrency tingkat tinggi). Mulai dari klik tombol mulai ujian, memuat soal bergambar, menyimpan jawaban setiap nomor, hingga mengirim berkas jawaban akhir. Tanpa arsitektur server yang andal dan aman, VPS dengan RAM 16GB atau bahkan 32GB sekalipun bisa langsung lumpuh mengalami Blue Screen, kebocoran memori (leakage), atau status Out Of Memory (OOM) crash sejak 5 menit pertama ujian dimulai.

Key Analogi & Esensi

Bayangkan server Anda seperti sebuah jembatan penyeberangan yang sempit. Tanpa pengaman di pintu masuk, ribuan orang akan berdesakan berebut masuk secara kacau hingga jembatan runtuh. Nginx bertindak sebagai gerbang tol penyaring otomatis di depan jembatan, sedangkan PM2 cluster bertindak sebagai armada bus yang mendistribusikan penumpang ke seluruh core prosesor agar perjalanan tetap lancar.

Lead Systems Specialist Klikto ID

Spesifikasi Arsitektur Sistem

Arsitektur High Concurrency

Visualisasi Sistem: Penanganan Trafik Ujian Online

Trafik Siswa
3,000+ Siswa/Detik
Simpan Jawaban
Muat Soal Ujian
Concurrences
Nginx Tameng
Rate Limit & Load Balancer
Gzip CompressionAktif
Dos Shield / Spam FilterAktif
Round Robin
PM2 Cluster Engine
Multi-Core Distribution
Core 1: Active
Core 2: Active
Core 3: Active
Core 4: Active
Hasil: Response time stabil di < 180ms pada beban puncak concurrency 3,000+ user.

1. Mengapa VPS Default Mudah Down Saat Menghadapi Concurrency Tinggi?

Sebagian besar kegagalan server ujian online tidak disebabkan oleh spesifikasi perangkat keras (hardware) yang kurang mumpuni, melainkan karena konfigurasi perangkat lunak (software) default yang belum disesuaikan untuk kebutuhan high-concurrency.

Di sisi web server, server web konvensional (seperti Apache dengan modul standar) secara default membuat satu thread proses untuk setiap user tunggal. Saat limit thread tercapai, user berikutnya terpaksa mengantre lama (timeout). Di sisi aplikasi backend (seperti Node.js), kode JavaScript secara default bersifat single-threaded, artinya ia hanya berjalan pada satu core CPU saja. Jika VPS Anda memiliki 8 core CPU, maka 7 core lainnya akan menganggur membiarkan 1 core utama bekerja kepayahan sendirian memproses jawaban siswa hingga akhirnya overhead.

Di sisi database, limit max_connections yang terlalu kecil pada MySQL/PostgreSQL juga sering memicu error 'Too many connections', membuat aplikasi lumpuh karena tidak bisa membaca data soal ujian.

2. Langkah Pertama: Konfigurasi Nginx sebagai Reverse Proxy Tangguh

Nginx dirancang menggunakan arsitektur event-driven non-blocking. Artinya, ia mampu menangani puluhan ribu koneksi simultan hanya dengan menggunakan resource memori yang sangat minimal. Kita menempatkan Nginx di baris terdepan sebagai Reverse Proxy.

Nginx bertugas menerima seluruh request dari browser siswa, melakukan penyaringan paket berbahaya, mengompres file statis (HTML, CSS, JS) menggunakan Gzip/Brotli, dan menyalurkan request bersih tersebut ke aplikasi internal di port lokal. Hal ini membebaskan backend Node.js atau PHP dari tugas melayani aset statis, sehingga backend bisa fokus memproses data jawaban ujian.

Berikut adalah template konfigurasi konfigurasi Nginx (/etc/nginx/nginx.conf) yang telah dioptimalkan untuk menangani beban trafik tinggi secara simultan:

nginx.conf
user nginx;
worker_processes auto; # Otomatis mendeteksi jumlah core CPU
pid /run/nginx.pid;

events {
    worker_connections 2048; # Meningkatkan limit koneksi per worker
    multi_accept on;         # Menerima semua koneksi baru sekaligus
    use epoll;               # Mengaktifkan metode I/O terbaik untuk Linux
}

http {
    # Optimasi Bandwidth & Kecepatan Kirim File
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;

    # Gzip Compression: Mengompresi data sebelum dikirim ke siswa
    gzip on;
    gzip_disable "msie6";
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 5; # Level kompresi seimbang (hemat CPU vs Bandwidth)
    gzip_types text/plain text/css application/json application/javascript text/xml;

    # Pencegahan DOS / Limit Rate request mencurigakan
    limit_req_zone $binary_remote_addr zone=one:10m rate=30r/s;

    server {
        listen 80;
        server_name cbt.sekolah.sch.id;

        location / {
            proxy_pass http://localhost:3000; # Mengarahkan ke port aplikasi backend
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            
            # Rate limiting untuk meredam spam klik tombol dari siswa
            limit_req zone=one burst=15 nodelay;
        }
    }
}

3. Langkah Kedua: Menjalankan Backend Node.js dalam Mode Cluster PM2

Bagi aplikasi backend berbasis Node.js, process manager PM2 adalah penyelamat utama. PM2 memiliki fitur bawaan bernama Cluster Mode yang memungkinkan kita menduplikasi instansi aplikasi sebanyak jumlah core CPU yang dimiliki VPS secara instan.

Misalnya, jika server Anda memiliki 4 core CPU, PM2 akan membuat 4 instansi aplikasi yang berjalan di port terpisah, dan PM2 akan secara otomatis bertindak sebagai internal load-balancer untuk membagi rata beban request ke 4 instansi tersebut.

Jika salah satu instansi mengalami error mendadak karena bug, PM2 akan menghidupkannya kembali (auto-restart) dalam milidetik tanpa mengganggu kenyamanan siswa lain yang sedang ujian. Berikut adalah file konfigurasi ecosystem.config.js untuk peluncuran PM2 cluster:

ecosystem.config.js
module.exports = {
  apps: [
    {
      name: "cbt-backend",
      script: "./dist/index.js", # Path ke file utama aplikasi Anda
      instances: "max",          # Duplikasi instansi sebanyak core CPU maksimal VPS
      exec_mode: "cluster",      # Wajib mengaktifkan mode cluster untuk multi-core
      watch: false,
      max_memory_restart: "1G",  # Auto-restart jika terjadi kebocoran memori > 1GB
      env: {
        NODE_ENV: "production",
        PORT: 3000
      }
    }
  ]
};

4. Pengujian Beban (Load Testing) & Hasil Nyata

Sebelum sistem dilepas ke publik, tim Klikto ID selalu melakukan load testing menggunakan tools benchmark profesional seperti Artillery atau k6. Kami mensimulasikan beban 3.000 user yang melakukan login dan mengklik tombol simpan jawaban secara simultan dalam kurun waktu 1 menit.

Hasilnya sangat kontras. Sebelum dilakukan optimasi (server default menggunakan Node.js single-thread dan Apache), response time melonjak hingga di atas 5.000ms pada detik ke-10, diikuti dengan error rate sebesar 42% (server crash).

Setelah dipasang arsitektur Nginx Reverse Proxy + PM2 Cluster Mode, server berhasil menangani seluruh request dengan response time rata-rata tetap berada di bawah 180ms, dan tingkat kegagalan transaksi data (error rate) ditekan habis hingga 0%.

Perbandingan Arsitektur: Default vs. Teroptimasi Klikto ID

Matriks evaluasi performa operasional dan tingkat keandalan sistem.

Aspek OperasionalManual / SebelumKlikto ID Way
Pemanfaatan Core CPUHanya memakai 1 Core saja (Single-Thread Node.js menganggur)Memakai seluruh Core secara seimbang (PM2 Cluster Mode)
Response Time saat Trafik Ramai> 5.000ms (Siswa mengalami lag parah, loading halaman berputar lama)< 200ms (Halaman soal dan simpan jawaban memuat instan)
Ketahanan terhadap CrashRentan Down total saat overload, butuh restart manual yang lamaAuto-healing instan. Jika 1 instansi error, PM2 me-restart tanpa downtime
Keamanan dari Serangan D/DOSServer langsung hang saat diserang spam klik/request bertubi-tubiDiredam oleh Nginx Rate Limiting dan proteksi buffer terdepan
Infrastruktur Cloud Tangguh

Khawatir Server Aplikasi Ujian Sekolah Anda Crash Saat Dipakai?

Jangan biarkan reputasi sekolah tercoreng akibat ujian online yang sering down dan membuat siswa panik. Mari diskusikan kebutuhan infrastruktur cloud instansi Anda bersama tim specialist kami untuk audit arsitektur VPS secara gratis.

Hubungi Kami