Setup Reverse Proxy & SSL dengan Nginx Proxy Manager

Setup Reverse Proxy & SSL dengan Nginx Proxy Manager

Bitnesia Linux Mar 27, 2026 227 EN

Di banyak setup self-hosting, satu alamat IP publik sering kali harus menampung puluhan service. Mengelola semua service ini dengan Nginx murni berarti menulis dan memelihara banyak server block, aturan proxy, dan route map yang rentan terhadap kesalahan konfigurasi saat service bertambah. Tantangan utamanya bukan hanya kompleksitas file konfigurasi, tetapi juga pengelolaan sertifikat TLS/SSL untuk setiap domain, penanganan pembaruan otomatis, dan konflik port.

Apa itu Nginx Proxy Manager (NPM)?

Nginx Proxy Manager (NPM) adalah aplikasi berbasis container yang membungkus Nginx dengan web User Interface untuk mengelola reverse proxy, host, sertifikat SSL/TLS, redirections, dan stream TCP/UDP. NPM menyediakan dashboard yang memungkinkan kita menambahkan atau mengubah proxy host, menghubungkan hostname dengan backend, dan meminta sertifikat Let's Encrypt tanpa menyentuh file konfigurasi Nginx secara manual.

Mengapa Memilih NPM?

  • Gratis & Open Source: Solusi gratis dengan komunitas yang aktif.
  • User Friendly UI: Cocok untuk pengguna yang tidak ingin edit config manual.
  • SSL Otomatis: Integrasi langsung dengan Let's Encrypt untuk issuance dan renewal otomatis.
  • Perbandingan Singkat:
    • Nginx Murni: Fleksibel tapi konfigurasi manual dan rawan human error.
    • NPM: Mengutamakan kemudahan operasi dan manajemen sertifikat terpusat.

1. Persiapan & Instalasi

Spesifikasi Minimum Server

  • CPU: 1 vCPU
  • RAM: 1 GB (2 GB direkomendasikan jika menjalankan banyak container)
  • Disk: 10 GB free space
  • Network: Akses inbound pada port 80, 443, dan 81

Instalasi Docker

Gunakan script resmi instalasi Docker. Jalankan perintah berikut:

sudo sh -c "curl -fsSL https://get.docker.com/ | sh"

Docker Compose

Membuat direktori npm:

mkdir npm
cd npm

Membuat file compose.yml:

nano compose.yml

Masukkan konfigurasi berikut, pastikan mengganti password pada bagian environment:

services:
  npm:
    image: jc21/nginx-proxy-manager:2.14.0
container_name: nginx-proxy-manager restart: unless-stopped ports: - "80:80" - "81:81" - "443:443" environment: DB_MYSQL_HOST: "db" DB_MYSQL_PORT: 3306 DB_MYSQL_USER: "npm" DB_MYSQL_PASSWORD: "npm_password_here" DB_MYSQL_NAME: "npm" volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt
depends_on: - db db:
image: 'jc21/mariadb-aria:latest' container_name: mariadb-nginx-proxy-manager restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: "root_password_here" MYSQL_DATABASE: "npm" MYSQL_USER: "npm" MYSQL_PASSWORD: "npm_password_here" volumes: - ./data/mysql:/var/lib/mysql

networks: default: name: npm_network

Keterangan:

  1. Services: npm (Reverse Proxy)
    • Ports:
      • 80:80 & 443:443: Jalur masuk utama untuk trafik HTTP dan HTTPS.
      • 81:81: Port untuk mengakses Dashboard Admin NPM.
    • Environment: Menghubungkan NPM ke database MariaDB menggunakan kredensial yang sama dengan service db.
    • Volumes:
      • ./data: Menyimpan konfigurasi host dan pengaturan user.
      • ./letsencrypt: Menyimpan sertifikat SSL agar tidak hilang saat kontainer di-restart.
  2. Services: db (Database)
    • Image (mariadb-aria): Versi database yang dioptimalkan untuk NPM agar lebih ringan dan cepat.
    • Volumes (./data/mysql): Sangat krusial agar data tabel dan user proxy tetap tersimpan secara permanen di disk host.
  3. Networks
    • name: npm_network: Membuat jaringan khusus. Container lain bisa dihubungkan ke jaringan yang sama dan dikenali oleh NPM cukup menggunakan nama container saja.

Menjalankan & Login Pertama

Jalankan container:

sudo docker compose up -d

Verifikasi hasil docker compose:

sudo docker compose ps

Contoh responnya:

NAME                          IMAGE                             COMMAND             SERVICE   CREATED          STATUS          PORTS
mariadb-nginx-proxy-manager   jc21/mariadb-aria:latest          "/scripts/run.sh"   db        37 seconds ago   Up 36 seconds   3306/tcp
nginx-proxy-manager           jc21/nginx-proxy-manager:latest   "/init"             npm       37 seconds ago   Up 36 seconds   0.0.0.0:80-81->80-81/tcp, [::]:80-81->80-81/tcp, 0.0.0.0:443->443/tcp, [::]:443->443/tcp

Akses panel admin pada port 81 (misal: http://server-ip:81). Lanjutkan membuat akun admin.

2. Skenario Penggunaan

a. Reverse Proxy untuk Docker Container

Aplikasi yang terbungkus Docker container ingin diakses via subdomain docker-app.domain.com melalui NPM pada host yang sama, dengan kondisi kedua container sudah terhubung ke dalam network yang sama (npm_network) agar komunikasi internal berjalan lancar.

Topologi:

User → Internet → NPM (80/443) → Container (container_name:80)

Menjalankan container yang mau dihubungkan dengan NPM:

sudo docker run -d --name nginx-app --network npm_network -p 127.0.0.1:8080:80 --restart always nginx:alpine

Langkah Membuat Proxy:

  1. Hosts → Proxy Hosts. Add Proxy Hosts.
  2. Details:
    • Domain Names = misal docker-app.domain.com.
    • Scheme = http.
    • Forward Hostname / IP = nginx-app (karena berada di network yang sama dengan NPM, cukup pakai nama container)
    • Forward Port = 80.
  3. SSL:
    • Request a new Certificate
    • Force SSL
    • HTTP/2 Support
    • HSTS Enabled
  4. Lalu Save.
Nginx Proxy Manager - Add Proxy Host
Nginx Proxy Manager - Add Proxy Host

b. Reverse Proxy untuk Host Berbeda

Kondisi saat ini aplikasi berada di host yang berbeda dengan NPM, sehingga akses dapat dilakukan melalui IP server aplikasi tersebut, bukan lagi menggunakan nama container.

Topologi:

User → Internet → NPM (10.130.0.2) → App (10.130.0.3:8080)

Langkah Membuat Proxy:

  1. Hosts → Proxy Hosts. Add Proxy Hosts.
  2. Details:
    • Domain Names = misal other-app.domain.com.
    • Scheme = http.
    • Forward Hostname / IP = IP server aplikasi, misal 10.130.0.3.
    • Forward Port = port aplikasi, misal 8080.
  3. SSL:
    • Request a new Certificate
    • Force SSL
    • HTTP/2 Support
    • HSTS Enabled
  4. Lalu Save.

3. Custom SSL Certificate

Jika tidak ingin menggunakan SSL dari Let's Encrypt, Nignx Proxy Manager mendukung custom SSL certificate. 

Menambah SSL Certificate:

  1. Certificates → Add Certificate → Custom Certificate.
  2. Beri nama certificate dan upload file certificate key, certificate, dan intermediate certificate (opsional).
  3. Save.

Mengganti SSL Certificate:

  1. Edit Proxy Host → tab SSL.
  2. Pada SSL Certificate, pilih nama SSL yang telah dimasukkan.
  3. Save.

Penutup

Nginx Proxy Manager mempermudah manajemen reverse proxy dan SSL lewat GUI, cocok untuk self-hosters yang ingin solusi cepat tanpa edit config manual. Untuk infrastruktur yang sangat dinamis atau ber-orchestrator besar, solusi lain mungkin lebih cocok, namun untuk prioritas kemudahan operasi dan manajemen terpusat, NPM adalah pilihan terbaik.

Dukung keberlanjutan tutorial open source Bitnesia melalui link di bawah ini.

Kirim Donasi

Related Posts