Banyak orang mengasosiasikan load balancing dengan Kubernetes, service mesh, atau cloud-native stack yang kompleks.
Padahal, jauh sebelum Kubernetes populer, Nginx sudah lama dan sangat stabil digunakan sebagai load balancer—bahkan sampai hari ini masih dipakai di production skala besar tanpa Kubernetes sama sekali.
Artikel ini membahas bagaimana Nginx bekerja sebagai load balancer, kapan cocok digunakan tanpa Kubernetes, serta kesalahpahaman umum yang sering terjadi.
Contents
- 1 1. Load Balancer ≠ Kubernetes
- 2 2. Apa yang Bisa Dilakukan Nginx sebagai Load Balancer?
- 3 3. Konsep Dasar: upstream
- 4 4. Algoritma Load Balancing di Nginx
- 5 5. Health Check: Jangan Asal Percaya Backend Hidup
- 6 6. Contoh Nyata: Load Balancer Tanpa Kubernetes
- 7 7. SSL Termination di Load Balancer
- 8 8. Sticky Session TANPA Kubernetes
- 9 9. Kapan Nginx TANPA Kubernetes Lebih Masuk Akal?
- 10 10. Kapan Kubernetes Lebih Tepat?
- 11 11. Kesalahan Umum Load Balancing dengan Nginx
- 12 12. Kesimpulan
- 13 Related Posts
1. Load Balancer ≠ Kubernetes
Salah kaprah paling umum:
“Kalau mau load balancing, harus pakai Kubernetes.”
Faktanya:
- Kubernetes bukan load balancer, ia orchestrator
- Load balancing adalah konsep, bukan produk
- Nginx, HAProxy, Envoy sudah melakukan load balancing jauh lebih dulu
Kubernetes hanya:
- Mengotomasi scaling
- Mengelola service discovery
- Menyediakan abstraction (
Service,Ingress)
Tanpa Kubernetes pun, load balancing tetap bisa dilakukan secara manual dan stabil.
2. Apa yang Bisa Dilakukan Nginx sebagai Load Balancer?
Nginx mampu melakukan:
- Layer 7 (HTTP/HTTPS) load balancing
- Layer 4 (TCP/UDP) load balancing
- Health check (basic)
- SSL termination
- Sticky session
- Rate limiting
- Failover backend
Dengan resource kecil, Nginx mampu menangani puluhan ribu request per detik.
3. Konsep Dasar: upstream
Kunci load balancing di Nginx adalah directive upstream.
Contoh Sederhana
upstream backend_app {
server 10.0.0.1:8080;
server 10.0.0.2:8080;
server 10.0.0.3:8080;
}
Kemudian dipakai di proxy_pass:
location / {
proxy_pass http://backend_app;
}
Artinya:
- Request akan dibagi ke tiga server backend
- Jika satu mati, request dialihkan ke server lain
4. Algoritma Load Balancing di Nginx
Secara default, Nginx menggunakan round-robin.
Namun tersedia opsi lain:
1. Round Robin (Default)
upstream backend {
server app1;
server app2;
}
Paling sederhana dan cukup untuk sebagian besar kasus.
2. Least Connections
upstream backend {
least_conn;
server app1;
server app2;
}
Cocok jika:
- Request punya durasi berbeda
- Ada endpoint berat (report, export, dsb)
3. IP Hash (Sticky Session)
upstream backend {
ip_hash;
server app1;
server app2;
}
Kegunaan:
- User yang sama → backend yang sama
- Berguna untuk aplikasi stateful
Catatan:
- Tidak cocok jika backend sering bertambah/berkurang
5. Health Check: Jangan Asal Percaya Backend Hidup
Tanpa Kubernetes, Anda bertanggung jawab penuh terhadap health check.
Passive Health Check (Default)
upstream backend {
server app1 max_fails=3 fail_timeout=30s;
server app2 max_fails=3 fail_timeout=30s;
}
Artinya:
- Jika 3 kali gagal dalam 30 detik
- Backend dianggap down sementara
⚠️ Ini bukan active health check.
Active Health Check (Nginx Plus)
Versi open-source:
- Tidak mendukung active health check HTTP
Alternatif:
- Script eksternal
- Monitoring + reload config
- Gunakan HAProxy jika perlu health check agresif
6. Contoh Nyata: Load Balancer Tanpa Kubernetes
Arsitektur Umum
Internet
|
[Nginx LB]
|
--------------------
| | |
App-1 App-2 App-3
Biasanya digunakan pada:
- VM on-premise
- VPS (DigitalOcean, Linode, dsb)
- Bare metal
7. SSL Termination di Load Balancer
Nginx sering dipakai untuk:
- Terminate HTTPS
- Backend tetap HTTP
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/ssl/cert.pem;
ssl_certificate_key /etc/ssl/key.pem;
location / {
proxy_pass http://backend_app;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
Keuntungan:
- Backend lebih ringan
- Sertifikat hanya di satu tempat
- Debug lebih mudah
8. Sticky Session TANPA Kubernetes
Untuk aplikasi PHP lama / session di memory:
upstream backend {
hash $cookie_SESSIONID consistent;
server app1;
server app2;
}
Catatan:
- Butuh konsistensi session key
- Masih rentan jika backend mati
Solusi lebih baik:
- Shared session (Redis / Memcached)
9. Kapan Nginx TANPA Kubernetes Lebih Masuk Akal?
Nginx lebih cocok jika:
- Backend statis (tidak auto-scale)
- Tim kecil
- Infra sederhana
- Traffic stabil
- Tidak perlu self-healing kompleks
Contoh:
- Aplikasi internal perusahaan
- API private
- Website company profile
- Legacy system
10. Kapan Kubernetes Lebih Tepat?
Kubernetes unggul jika:
- Scaling dinamis
- Banyak service
- Deployment sering
- Butuh auto-healing
- Tim DevOps matang
Masalahnya:
Banyak tim belum butuh Kubernetes, tapi sudah terlanjur pakai.
11. Kesalahan Umum Load Balancing dengan Nginx
- Tidak set timeout → request menggantung
- Tidak kirim header
X-Forwarded-* - Menganggap backend “pasti sehat”
- Reload config terlalu sering
- Tidak monitoring error rate
12. Kesimpulan
Nginx bukan alternatif murahan Kubernetes. Ia adalah:
- Lebih sederhana
- Lebih mudah dipahami
- Lebih mudah di-debug
- Sangat stabil untuk banyak use case
Kalau infrastrukturnya sederhana, Nginx sebagai load balancer sudah lebih dari cukup.
Kubernetes itu powerful, tapi power tidak selalu berarti perlu.