Tutorial

Nginx Reverse Proxy untuk Docker Containers: Setup Lengkap

Nginx Reverse Proxy untuk Docker Containers: Setup Lengkap

Reverse proxy adalah komponen penting dalam arsitektur Docker. Nginx duduk di depan container Anda dan merutekan traffic berdasarkan domain atau path ke container yang tepat.

Kenapa Butuh Reverse Proxy?

  • SSL termination β€” satu tempat manage HTTPS, bukan di setiap container
  • Routing β€” domain A ke container X, domain B ke container Y
  • Load balancing β€” distribusi traffic ke beberapa replicas
  • Security β€” container tidak expose langsung ke internet
  • Caching β€” cache static assets di proxy层

Docker Compose Setup

version: '3.8'
services:
  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./certs:/etc/nginx/certs
      - static_files:/var/www/static
    depends_on:
      - app1
      - app2
    restart: unless-stopped

  app1:
    image: myapp-v1:latest
    expose:
      - "3000"
    restart: unless-stopped

  app2:
    image: myapp-v2:latest
    expose:
      - "3001"
    restart: unless-stopped

volumes:
  static_files:

Konfigurasi Nginx

upstream app1_backend {
    server app1:3000;
}

upstream app2_backend {
    server app2:3001;
}

server {
    listen 80;
    server_name app1.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name app1.example.com;

    ssl_certificate /etc/nginx/certs/fullchain.pem;
    ssl_certificate_key /etc/nginx/certs/privkey.pem;

    location / {
        proxy_pass http://app1_backend;
        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;
    }

    # Static files
    location /static/ {
        alias /var/www/static/;
        expires 30d;
    }
}

WebSocket Support

location /ws {
    proxy_pass http://app1_backend;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_read_timeout 86400;
}

Load Balancing

upstream app_backend {
    least_conn;  # atau round-robin (default)
    server app1:3000;
    server app2:3000;
    server app3:3000;
}

Rate Limiting

http {
    limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;

    server {
        location /api/ {
            limit_req zone=api burst=20 nodelay;
            proxy_pass http://app_backend;
        }
    }
}

Reverse proxy Nginx adalah alternatif dari Caddy reverse proxy yang lebih simpel. Untuk perbandingan lengkap, baca Caddy vs Nginx di 2026. Untuk setup awal server, lihat panduan self-hosting lengkap.