1. Apa Itu Error 502 Bad Gateway?
Status kode HTTP 502 Bad Gateway terjadi ketika server web Nginx (yang bertindak sebagai Reverse Proxy / Gateway) mencoba meneruskan request dari browser klien ke aplikasi backend di belakangnya (upstream server), namun koneksi ke backend tersebut gagal atau ditolak (Connection refused).
Mekanisme Gateway
Nginx menerima permintaan HTTPS port 443 dari pengguna, lalu memeriksa aturan routing (location /...) untuk menentukan aplikasi backend mana yang harus merespons (misal Node.js, Python FastAPI, atau Next.js).
Titik Kegagalan (Failure Point)
Jika Nginx diarahkan ke port upstream yang tidak ada aplikasinya atau port tersebut mati, Nginx tidak menerima respon balik sehingga mengeluarkan halaman default: 502 Bad Gateway - nginx/1.24.0 (Ubuntu).
2. Temuan Investigasi & Log Server
Berdasarkan pemeriksaan log error Nginx pada /var/log/nginx/error.log, ditemukan entri kegagalan koneksi upstream sebagai berikut:
# Cuplikan log /var/log/nginx/error.log
2026/08/16 16:20:43 [error] connect() failed (111: Connection refused) while connecting to upstream,
client: 10.10.10.251, server: web.kingverse.cloud,
request: "GET /dashboards/clan/realtime HTTP/1.1",
upstream: "http://127.0.0.1:3080/dashboards/clan/realtime",
host: "web.kingverse.cloud"
Dua Faktor Utama Penyebab:
- Konfigurasi Port Upstream Typo / Usang (3080 vs 3000): Nginx sebelumnya diatur untuk meneruskan route
/dashboardsdan chunk/_next/ke port3080. Tidak ada process server lokal yang berjalan di port 3080 (aplikasi Next.js Command Center berjalan di port3000). - Perubahan Struktur Routing Realtime Crew: Platform Realtime Crew Analytics telah distandarisasi di Next.js standalone dengan prefix
/ninja-crewpada port3050. Ketika pengguna mengakses link lama/dashboards/clan/realtime, belum ada aturan redirect otomatis yang mengarahkannya. - Intersepsi Route Admin Laravel: Regex lama menyertakan kata kunci
adminyang sempat menabrak route Filament/Blade backend Laravel.
3. Solusi & Perubahan yang Diterapkan
Telah dilakukan update pada konfigurasi virtual host Nginx /etc/nginx/sites-enabled/king-verse.conf:
# 1. Alias & Redirect Pintar untuk Dashboard Realtime
location ^~ /dashboards/clan {
return 301 /ninja-crew;
}
location ^~ /dashboards/realtime {
return 301 /ninja-crew;
}
location ^~ /dashboards/shadow-war {
return 301 /sw/leaderboard/realtime;
}
location ^~ /dashboards {
return 301 /dashboard;
}
# 2. Next.js App Proxy (Diarahkan ke Port Aktif 3000)
location ~ ^/(dashboard|crew|events|system|docs|shadow-war|players|analytics|tools|settings|logos|api/sw)(/|$) {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
# 3. Next.js Static Chunks /_next/
location /_next/ {
proxy_pass http://127.0.0.1:3000/_next/;
proxy_http_version 1.1;
proxy_set_header Host $host;
}
4. Pemetaan Port & Layanan KingVerse
Daftar port microservices yang aktif dan terdaftar di PM2 / Systemd:
| Port | Service Name | Technology | Endpoint URL Publik | Status |
|---|---|---|---|---|
| 3000 | nextjs-kingverse | Next.js 16 (App Router) | /dashboard, /crew, /leaderboard |
ONLINE |
| 3050 | ninja-realtime-frontend | Next.js 14 (Realtime Crew) | /ninja-crew |
ONLINE |
| 8010 | ninja-realtime-backend | Python FastAPI + SSE | /ninja-crew/api/realtime, /api/crew |
ONLINE |
| 3010 | shadow-war-frontend | Next.js (Shadow War UI) | /sw/leaderboard/realtime |
ONLINE |
| 8000 | shadow-war-backend | Python FastAPI Engine | /sw/leaderboard/realtime/api/ |
ONLINE |
| 8007 | laravel-main | PHP 8.3 Laravel + Filament | /, /admin, /joki, /backend |
ONLINE |
| 3001 | ns-api-server | Node.js Express | /api-relay/ |
ONLINE |
| 3002 | ns-socket-relay | Node.js Socket.IO | /socket.io/ |
ONLINE |
| 3003 | ns-sse-relay | Node.js SSE Server | /sse |
ONLINE |
5. Panduan Pemeliharaan & Pencegahan
Jika di masa depan muncul status 502 Bad Gateway pada salah satu fitur, jalankan pengecekan cepat berikut di server:
# 1. Cek status semua service PM2
pm2 list
# 2. Cek apakah port backend yang dituju sedang aktif (listening)
ss -tulpn | grep -E '3000|3050|3010|8007|8010|8000'
# 3. Cek log error Nginx secara realtime
tail -f /var/log/nginx/error.log
# 4. Restart service yang mengalami error
pm2 restart <service-name>
sudo systemctl reload nginx