Reverse Proxy dan Nginx Proxy Manager
Memahami reverse proxy, memasang Nginx Proxy Manager dengan Docker, dan meneruskan domain ke aplikasi di VM/LXC.
Reverse proxy menerima request dari client lalu meneruskannya ke server aplikasi di belakangnya. Ia menyederhanakan SSL, domain, dan routing banyak aplikasi dalam satu server.
Forward proxy vs reverse proxy
| Aspek | Forward proxy | Reverse proxy |
|---|---|---|
| Posisi | Di depan client | Di depan server |
| Tujuan | Client mengakses internet | Client mengakses layanan internal |
| Contoh | Proxy kantor | Nginx, NPM, Traefik |
Manfaat reverse proxy
- Satu IP/port 80/443 untuk banyak aplikasi.
- Terminasi SSL di satu tempat.
- Routing berdasarkan domain atau path.
- Menyembunyikan topologi internal.
- Menambahkan header keamanan, cache, dan rate limit.
Nginx Proxy Manager (NPM)
NPM adalah antarmuka web untuk mengelola Nginx, sertifikat, dan proxy host. Cocok untuk pemula karena konfigurasi dilakukan lewat GUI.
Arsitektur
Internet / Cloudflare
│
▼
Nginx Proxy Manager :80/:443
├── app.example.com → 10.10.10.11:3000
├── api.example.com → 10.10.10.12:8080
└── admin.example.com → 10.10.10.13:801. Instalasi dengan Docker Compose
Siapkan direktori:
mkdir -p /srv/npm
cd /srv/npmBuat docker-compose.yml:
services:
npm:
image: jc21/nginx-proxy-manager:latest
container_name: nginx-proxy-manager
restart: unless-stopped
ports:
- "80:80"
- "443:443"
- "81:81"
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencryptJalankan:
docker compose up -d
docker compose ps
docker compose logs -f npmBuka admin UI di http://IP-SERVER:81.
Login pertama
| Field | Nilai default |
|---|---|
admin@example.com | |
| Password | changeme |
Segera ganti email dan password setelah login pertama.
Amankan port admin 81
Jangan membuka port 81 ke internet. Batasi aksesnya lewat firewall, Tailscale, atau SSH tunnel.
2. Menambahkan proxy host
- Buka Hosts → Proxy Hosts → Add Proxy Host.
- Isi:
- Domain Names:
app.example.com - Scheme:
http - Forward Hostname/IP:
10.10.10.11 - Forward Port:
3000
- Domain Names:
- Aktifkan Block Common Exploits.
- Simpan.
NPM akan membuat konfigurasi Nginx dan meneruskan request.
WebSocket
Aktifkan Websockets Support bila aplikasi memakai WebSocket (mis. chat, live update, HMR di development).
Header dan cache
Di tab Advanced, Anda bisa menambahkan konfigurasi Nginx:
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;Header ini penting agar aplikasi mengetahui IP asli dan protokol yang dipakai.
3. SSL di NPM
- Buka proxy host → tab SSL.
- Pilih Request a new SSL Certificate.
- Aktifkan Use a DNS Challenge bila memakai Cloudflare.
- Isi API token Cloudflare.
- Setujui Terms of Service.
- Simpan.
NPM akan meminta sertifikat Let's Encrypt dan memasangnya otomatis. Perpanjangan juga otomatis.
Cloudflare proxy + NPM
Jika domain diproxy Cloudflare, Anda bisa memakai Cloudflare Origin Certificate di NPM atau mode Full (strict) dengan sertifikat Let's Encrypt. Hindari mode Flexible karena lalu lintas Cloudflare–origin tidak terenkripsi.
4. Access list dan keamanan
NPM menyediakan Access Lists untuk basic auth pada host tertentu.
- Buka Access Lists → Add Access List.
- Buat user dan password.
- Terapkan ke proxy host di tab Access List.
Untuk aplikasi internal, lebih baik batasi akses lewat firewall/Tailscale daripada hanya basic auth.
5. Troubleshooting
| Gejala | Penyebab umum |
|---|---|
502 Bad Gateway | Aplikasi tidak berjalan atau IP/port salah |
504 Gateway Timeout | Aplikasi lambat/tidak merespons |
| Redirect loop | Konflik SSL/redirect Cloudflare |
| WebSocket gagal | Websockets Support belum aktif |
| Sertifikat gagal | DNS challenge/API token salah |
| Halaman default Nginx | Proxy host belum cocok domain |
Cek log:
docker compose logs -f npm
docker exec -it nginx-proxy-manager tail -f /data/logs/fallback_error.logUji backend langsung dari server NPM:
curl -I http://10.10.10.11:3000Praktik: menerbitkan aplikasi Node.js
- Jalankan aplikasi Node.js di LXC
10.10.10.11:3000. - Pastikan aplikasi listen di
0.0.0.0, bukan127.0.0.1. - Tambahkan proxy host
app.example.comdi NPM. - Aktifkan SSL.
- Uji:
curl -I https://app.example.com - Cek log NPM dan log aplikasi bila gagal.
Ringkasan
- Reverse proxy meneruskan request ke aplikasi internal dan memusatkan SSL.
- NPM menyediakan GUI untuk mengelola proxy host dan sertifikat.
- Pastikan backend listen di interface yang benar dan port sesuai.
- Amankan port admin dan gunakan SSL yang valid.
Selanjutnya
Atur sertifikat dan mode SSL di SSL/HTTPS, Cloudflare Proxy, dan DNS Configuration.
Domain, DNS, dan Cloudflare Fundamentals
Membeli dan mengelola domain, memahami nameserver serta record DNS, dan menghubungkan domain ke Cloudflare.
SSL/HTTPS, Cloudflare Proxy, dan DNS Configuration
Mengatur sertifikat SSL, memilih mode SSL Cloudflare yang benar, serta menghindari mixed content dan redirect loop.