Panduan Teknis: Konfigurasi Nginx Reverse Proxy untuk Multi-Container Docker
Mengelola Routing Traffic Multi-Container Menggunakan Nginx
Saat menjalankan beberapa aplikasi Web / API berbasis **Docker** pada satu server Linux, Anda tidak dapat mengikat (bind) port HTTP standar (80/443) ke lebih dari satu container sekaligus. Solusi arsitektur terbaik untuk masalah ini adalah menerapkan Nginx sebagai Reverse Proxy.
Nginx berdiri di barisan paling depan untuk menerima semua *request* masuk di port 80/443, kemudian meneruskannya (forwarding) ke container aplikasi yang sesuai berdasarkan nama domain (*Server Name*) atau *URL Path*.
Skenario Topology & Setup Docker Network
Komunikasi Antar Container Dalam Satu Jaringan Bridge
Sebelum mengonfigurasi Nginx, buat *custom bridge network* di Docker agar Nginx dapat mengenali container aplikasi menggunakan nama servicenya (Internal DNS Resolver):
# Buat jaringan isolasi Docker
docker network create web-network
Jalankan dua container aplikasi contoh (misalnya Web App A di port internal 8080 dan Web App B di port 8081) di dalam jaringan yang sama:
# Container Web App A
docker run -d --name app_a --network web-network -p 8080:80 nginx:alpine
# Container Web App B
docker run -d --name app_b --network web-network -p 8081:80 nginx:alpine
Konfigurasi Block Server Nginx (Virtual Host)
Penulisan Script Konfigurasi Block Server pada Nginx
Buat file konfigurasi reverse proxy baru di lokasi /etc/nginx/conf.d/apps.conf:
# Konfigurasi Reverse Proxy Nginx untuk Web App A
server {
listen 80;
server_name appA.veendytech.local;
location / {
proxy_pass http://127.0.0.1:8080;
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;
}
}
# Konfigurasi Reverse Proxy Nginx untuk Web App B
server {
listen 80;
server_name appB.veendytech.local;
location / {
proxy_pass http://127.0.0.1:8081;
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;
}
}
Uji Coba Konfigurasi & Reload Nginx
Selalu lakukan pengujian sintaks sintaksis Nginx sebelum memuat ulang daemon layanan untuk menghindari downtime akibat kesalahan pengetikan:
# Uji sintaksis berkas konfigurasi Nginx
sudo nginx -t
# Jika output 'syntax is ok', reload Nginx
sudo systemctl reload nginx
Properti
proxy_set_header X-Real-IP $remote_addr; sangat penting agar aplikasi di dalam container tetap bisa mencatat alamat IP asli dari pengunjung, bukan IP internal milik Nginx.
Kesimpulan
Mengombinasikan Nginx Reverse Proxy dan Docker Container memberikan fleksibilitas tinggi dalam mengelola banyak layanan dalam satu server tanpa bentrokan alokasi port.
Selamat mencoba di Home Lab Anda!
— Tim Redaksi VeendyTech | Panduan & Dokumentasi IT Indonesia