Paket 1 · Fondasi DevOpsModul G — Domain, Cloudflare & Reverse Proxy

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

AspekForward proxyReverse proxy
PosisiDi depan clientDi depan server
TujuanClient mengakses internetClient mengakses layanan internal
ContohProxy kantorNginx, 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:80

1. Instalasi dengan Docker Compose

Siapkan direktori:

mkdir -p /srv/npm
cd /srv/npm

Buat 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/letsencrypt

Jalankan:

docker compose up -d
docker compose ps
docker compose logs -f npm

Buka admin UI di http://IP-SERVER:81.

Login pertama

FieldNilai default
Emailadmin@example.com
Passwordchangeme

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

  1. Buka Hosts → Proxy Hosts → Add Proxy Host.
  2. Isi:
    • Domain Names: app.example.com
    • Scheme: http
    • Forward Hostname/IP: 10.10.10.11
    • Forward Port: 3000
  3. Aktifkan Block Common Exploits.
  4. 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

  1. Buka proxy host → tab SSL.
  2. Pilih Request a new SSL Certificate.
  3. Aktifkan Use a DNS Challenge bila memakai Cloudflare.
  4. Isi API token Cloudflare.
  5. Setujui Terms of Service.
  6. 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.

  1. Buka Access Lists → Add Access List.
  2. Buat user dan password.
  3. Terapkan ke proxy host di tab Access List.

Untuk aplikasi internal, lebih baik batasi akses lewat firewall/Tailscale daripada hanya basic auth.

5. Troubleshooting

GejalaPenyebab umum
502 Bad GatewayAplikasi tidak berjalan atau IP/port salah
504 Gateway TimeoutAplikasi lambat/tidak merespons
Redirect loopKonflik SSL/redirect Cloudflare
WebSocket gagalWebsockets Support belum aktif
Sertifikat gagalDNS challenge/API token salah
Halaman default NginxProxy host belum cocok domain

Cek log:

docker compose logs -f npm
docker exec -it nginx-proxy-manager tail -f /data/logs/fallback_error.log

Uji backend langsung dari server NPM:

curl -I http://10.10.10.11:3000

Praktik: menerbitkan aplikasi Node.js

  1. Jalankan aplikasi Node.js di LXC 10.10.10.11:3000.
  2. Pastikan aplikasi listen di 0.0.0.0, bukan 127.0.0.1.
  3. Tambahkan proxy host app.example.com di NPM.
  4. Aktifkan SSL.
  5. Uji:
    curl -I https://app.example.com
  6. 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

On this page