Cara Mudah Konfigurasi Nginx Reverse Proxy dengan Nginx Proxy Manager
Nginx Proxy Manager adalah sebuah aplikasi open-source yang digunakan untuk mengelola dan mengkonfigurasi server proxy Nginx dengan antarmuka pengguna grafis (GUI). Nginx adalah server web yang dapat digunakan sebagai server proxy untuk mengarahkan permintaan HTTP dan HTTPS ke berbagai layanan dan aplikasi di belakangnya. Nginx Proxy Manager memudahkan pengguna dalam mengatur server proxy Nginx tanpa harus melakukan konfigurasi manual yang rumit.
Beberapa fitur utama Nginx Proxy Manager meliputi:
- Antarmuka Pengguna Grafis: Nginx Proxy Manager menyediakan antarmuka pengguna grafis berbasis web yang mudah digunakan, memungkinkan pengguna untuk mengatur proxy dan mengelola sertifikat SSL.
- Pengelolaan Host: Pengguna dapat dengan mudah menambahkan host untuk mengarahkan permintaan HTTP dan HTTPS ke aplikasi atau layanan yang diinginkan.
- Sertifikat SSL: Nginx Proxy Manager mendukung otomatisasi sertifikat SSL menggunakan Let’s Encrypt, sehingga pengguna dapat mengamankan koneksi ke aplikasi mereka.
Nginx Proxy Manager sangat berguna bagi pengguna yang ingin mengarahkan lalu lintas web ke berbagai layanan atau aplikasi, seperti server web, aplikasi berbasis kontainer, atau aplikasi lainnya, tanpa harus melakukan konfigurasi manual yang kompleks. Dengan antarmuka pengguna grafisnya yang intuitif, ini menjadi solusi yang populer untuk mengelola proxy Nginx dengan mudah.
1. Install Docker
Langkah awal yang harus dilakukan yaitu install Docker terlebih dulu jika belum tersedia. Berikut ini langkah-langkah install Docker di Ubuntu.
Memasang key untuk repository Docker.
1 | curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg |
Memasang repository Docker.
1 2 3 | echo \ "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null |
Update repository.
1 | sudo apt update |
Menginstal Docker.
1 | sudo apt install docker-ce docker-ce-cli containerd.io -y |
2. Deploy Website
Langkah berikutnya yaitu kita deploy website HTML sederhana yang akan dijalankan dengan menggunakan Docker container.
Membuat direktori untuk project website, misal app-domainxyz
.
1 | mkdir app-domainxyz |
Masuk ke direktori app-domainxyz
.
1 | cd app-domainxyz |
Membuat direktori www untuk penyimpanan semua file website.
1 | mkdir www |
Membuat file index.html sederhana di dalam direktori www
.
1 | nano www/index.html |
Contoh isi file index.html
.
1 2 3 4 5 6 7 8 9 10 | <!DOCTYPE html> <html> <head> <title>Website App DomainXYZ</title> </head> <body> <h1>Selamat datang di website App DomainXYZ</h1> <p>Ini adalah contoh halaman web HTML yang dijalankan menggunakan Docker.</p> </body> </html> |
Membuat file docker-compose.yml
untuk build dan deploy website HTML di atas Docker container.
1 | nano docker-compose.yml |
Masukkan konfigurasi docker-compose.yml
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | version: '3.8' services: web: image: nginx:latest container_name: app-domainxyz ports: - "127.0.0.1:8080:80" volumes: - ./www:/usr/share/nginx/html restart: always networks: default: external: true name: proxy_network |
Penjelasan baris konfigurasi docker-compose.yml
untuk app-domainxyz
.
- Membuat container dengan nama
app-domainxyz
dengan menggunakan Docker imagenginx-latest
. - Website dapat diakses melalui IP 127.0.0.1 port 8080 pada host, lalu diarahkan ke port 80 pada container
app-domainxyz
./li> - Direktori
www
di-mount ke direktori/usr/share/nginx/html
di dalam container. - Default network memakai network
proxy_network
yang konfigurasinya di luar Docker Compose, harus dibuat terlebih dulu.
Membuat network proxy_network
.
1 | sudo docker network create proxy_network |
Menjalankan konfigurasi docker-compose.yml
untuk mulai build container sekaligus menjalankannya.
1 | sudo docker compose up -d |
Pesan yang ditampilkan jika proses docker compose
sudah selesai.
1 | Container app-domainxyz Started |
Memeriksa container yang berjalan saat ini, apakah sudah ada container dengan nama app-domainxyz
.
1 | sudo docker ps |
Contoh hasilnya.
1 2 | CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4590c508e88e nginx:latest "/docker-entrypoint.…" 13 minutes ago Up 13 minutes 127.0.0.1:8081->80/tcp app-domainxyz |
Menguji apakah website sudah dapat diakses melalui http://127.0.0.1:8080
.
1 | curl http://127.0.0.1:8080 |
Jika berhasil, akan menampilkan source code index.html
.
3. Install Nginx Proxy Manager
Membuat direktori nginx-proxy-manager
.
1 2 | cd mkdir nginx-proxy-manager |
Masuk ke direktori nginx-proxy-manager
.
1 | cd nginx-proxy-manager |
Membuat direktori data
, letsencrypt
, dan mysql
.
1 | mkdir data letsencrypt mysql |
Membuat file docker-compose.yml
untuk Nginx Proxy Manager.
1 | nano docker-compose.yml |
Masukkan konfigurasinya.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | version: '3.8' services: app: image: 'jc21/nginx-proxy-manager:latest' container_name: nginx-proxy-manager restart: unless-stopped ports: - '80:80' - '443:443' - '81:81' environment: DB_MYSQL_HOST: "db" DB_MYSQL_PORT: 3306 DB_MYSQL_USER: "npm" DB_MYSQL_PASSWORD: "npm" 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: 'npm' MYSQL_DATABASE: 'npm' MYSQL_USER: 'npm' MYSQL_PASSWORD: 'npm' volumes: - ./mysql:/var/lib/mysql networks: default: external: true name: proxy_network |
Penjelasan konfigurasi di atas:
- Membuat container
nginx-proxy-manager
dengan menggunakan Docker imagejc21/nginx-proxy-manager:latest
. - Port yang diekspos
80
,443
, dan81
untuk akses web GUI Nginx Proxy Manager. - Membuat environment variable untuk database.
- Mount direktori untuk
data
danletsencrypt
. - Membuat container
mariadb-nginx-proxy-manager
dengan menggunakan Docker imagejc21/mariadb-aria:latest
. - Mount direktori
mysql
. - Default network menggunakan
proxy_network
.
Menjalankan konfigurasi docker-compose.yml
.
1 | sudo docker compose up -d |
Jika proses docker compose
selesai dan berhasil ditampilkan pesan:
1 | Container nginx-proxy-manager Started |
Menampilkan container yang sedang berjalan untuk melihat apakah sudah ada container nginx-proxy-manager
dan mariadb-nginx-proxy-manager
yang berjalan.
1 | sudo docker ps |
Contoh hasilnya.
1 2 3 | CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 45831d60548a jc21/nginx-proxy-manager:latest "/init" 16 minutes ago Up 16 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp, 127.0.0.1:81->81/tcp nginx-proxy-manager 9231824a48b9 jc21/mariadb-aria:latest "/scripts/run.sh" 16 minutes ago Up 16 minutes 3306/tcp mariadb-nginx-proxy-manager |
Menguji hasil Docker Compose
untuk container nginx-proxy-manager
dengan mengakses http://IP-Server:81
. Default login menggunakan email [email protected]
dan password changeme
.
Lalu ubah email.
Lalu ubah password.
4. Konfigurasi Proxy Hosts
Sekarang membuat konfigurasi proxy host untuk website yang telah berjalan di container dengan port 8080.
Klik menu Hosts → Proxy Hosts
, lalu tombol Add Proxy Host
.
Masukkan:
Domain Names
: masukkan nama domain atau subdomain. Pastikan sudah diarahkan ke IP server.Scheme
: pilih protokol yang digunakan, untuk awal pilihhttp
.Forward Hostname / IP
: masukkan nama container atau IP container.Forward Port
: masukkan port80
.
Lalu Save
.
Menguji hasil konfigurasi dengan mengakses domain atau subdomainnya, misal yang digunakan http://app.domainxyz.com
.
5. Install SSL
Selanjutnya menginstal SSL untuk mengaktifkan protokol HTTPS.
Edit Proxy Host yang telah dibuat sebelumnya, klik tab SSL
.
Masukkan:
SSL Certificate
pilihRequest a new SSL Certificate
.Force SSL
aktifkan.HTTP/2 Support
aktifkan.Email Address for Let's Encrypt
masukkan alamat email.I Agree to the Let's Encrypt Terms of Service
aktifkan.
Lalu Save
.
Menguji hasil install SSL dengan mengakses http://app.domainxyz.com
, akan secara otomatis redirect ke https://apps.domainxyz.com
.
Penutup
Dalam tutorial ini, kita telah mempelajari langkah-langkah mudah untuk mengkonfigurasi Nginx Reverse Proxy menggunakan Nginx Proxy Manager. Dengan panduan ini, kita sekarang memiliki pengetahuan dan keterampilan yang diperlukan untuk mengimplementasikan Nginx Reverse Proxy dengan mudah.
Semoga tutorial ini bermanfaat.
Selamat mencoba 🙂
saya menemukan error Error response from daemon: driver failed programming external connectivity on endpoint nginx-proxy-manager (56b98fd1bd39fa4603e3d1e41512785ef26900597b2c2 d40c2eb79676ba656ef): Error starting userland proxy: listen tcp4 0.0.0.0:80: bind: address already in use
cara memperbaikinya gimana y?
Error starting userland proxy: listen tcp4 0.0.0.0:80: bind: address already in use. nomor port sudah terpakai.
padahal ini baru install semua. kok bisa terpakai y
SSL cert nya ini wajib pake domain yang online ya Pak? misal cloudflare / duckdns,
tidak bisa pakai domain local?
beberapa referensi bisa pakai domain local. googling keyword “nginx proxy manager local dns”