Mengelola Reverse Proxy dengan Mudah Menggunakan Nginx Proxy Manager

Introduction

Mengelola banyak aplikasi dalam satu server sering kali membutuhkan reverse proxy untuk memetakan domain ke port internal. Nginx Proxy Manager (NPM) memudahkan proses ini tanpa perlu mengedit file konfigurasi Nginx manual.
Dengan NPM, kita bisa:

Flow yang digunakan di artikel ini:

Persiapan (Prepare)

  1. Port: Pastikan port 80 dan 443 terbuka.
  2. Server: Ubuntu 20.04/22.04 dengan akses root.
  3. Domain: Sudah diarahkan ke server melalui Cloudflare (contoh: pipeline.igunawan.com & docker-manager.igunawan.com).
  4. Docker & Docker Compose: Pastikan sudah terinstall.

Langkah-langkah Setup

1. Setup Project Directory

mkdir -p ~/nginx-proxy-manager
cd ~/nginx-proxy-manager

2. Buat Docker Compose File

Buat file docker-compose.yml:

version: '3.8'

services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

Jalankan docker-compose

docker compose up -d

3. Akses Dashboard NPM

  • Buka http://IP_SERVER:81
  • Login default: makefileCopyEditEmail: admin@example.com Password: changeme
  • Ubah email & password sesuai kebutuhan.

4. Tambah Reverse Proxy Host

Centang Force SSL setelah aktifkan SSL dari tab SSL.

Masuk menu Proxy Hosts → Add Proxy Host.

Domain Names: pipeline.igunawan.com

Scheme: http

Forward Hostname/IP: jenkins

Forward Port: 8080

5. Integrasi SSL Otomatis

  • Pilih tab SSL → Request a new SSL Certificate
  • Centang Force SSL & HTTP/2 Support.
  • SSL otomatis dari Let’s Encrypt.

6. Integrasi Cloudflare

  • Pastikan DNS A/AAAA di Cloudflare mengarah ke IP server.
  • Mode proxy Cloudflare bisa ON (orange cloud) untuk proteksi.

Hasil Akhir

SSL otomatis aktif, reverse proxy terkelola GUI.

pipeline.igunawan.com → Mengarah ke Jenkins container.

docker.igunawan.com → Mengarah ke Portainer container.

Leave a Reply

Your email address will not be published. Required fields are marked *