Load Balancing

Load balancing adalah teknik untuk mendistribusikan trafik jaringan secara merata ke beberapa server backend agar sistem lebih stabil, cepat, dan tahan terhadap kegagalan.

Nginx bisa bertindak sebagai reverse proxy dan load balancer yang ringan tapi sangat powerful.

Jenis Load Balancing di Nginx

  1. Round Robin (default): Permintaan didistribusikan secara berurutan.
  2. Least Connections: Server dengan koneksi aktif paling sedikit dipilih.
  3. IP Hash: Trafik dari IP client yang sama akan selalu diarahkan ke server yang sama.
  4. Weight: Memberi bobot pada tiap server untuk menentukan proporsi trafik.

Langkah-langkah Konfigurasi Load Balancing dengan Nginx

1. Persiapan

  • Pastikan kamu punya beberapa server backend. Untuk testing, bisa pakai beberapa container lokal, VM, atau service di port berbeda.
  • Install Nginx:
sudo apt update
sudo apt install nginx

2. Struktur Sederhana Load Balancing

Misalkan kamu punya 3 aplikasi web di port 3001, 3002, dan 3003 di localhost.

Edit file konfigurasi Nginx:

sudo nano /etc/nginx/conf.d/loadbalancer.conf

Tambahkan konfigurasi berikut:

upstream backend_servers {
    server 127.0.0.1:3001;
    server 127.0.0.1:3002;
    server 127.0.0.1:3003;
}

server {
    listen 80;
    server_name localhost;

    location / {
        proxy_pass http://backend_servers;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

3. Jenis Load Balancing Lain

a. Least Connections:

upstream backend_servers {
    least_conn;
    server 127.0.0.1:3001;
    server 127.0.0.1:3002;
    server 127.0.0.1:3003;
}

b. IP Hash:

upstream backend_servers {
    ip_hash;
    server 127.0.0.1:3001;
    server 127.0.0.1:3002;
    server 127.0.0.1:3003;
}

c. Weighted Load Balancing:

upstream backend_servers {
    server 127.0.0.1:3001 weight=3;
    server 127.0.0.1:3002 weight=1;
    server 127.0.0.1:3003 weight=1;
}

4. Cek dan Reload Konfigurasi Nginx

sudo nginx -t  # untuk cek error konfigurasi
sudo systemctl reload nginx

Pengujian

Bisa gunakan browser atau curl untuk mengakses http://localhost beberapa kali dan lihat apakah isi response-nya berubah (jika tiap server mengembalikan isi berbeda). Misal:

curl http://localhost

📌 Tips Tambahan

  • Gunakan cache jika backend cukup berat.
  • Aktifkan GZIP untuk mempercepat transfer data.
  • Gunakan HTTPS di depan, dan forward ke HTTP di belakang.