Dalam pengembangan aplikasi web modern, seringkali kita perlu menjalankan beberapa aplikasi Node.js secara bersamaan di satu server.
Misalnya, kita memiliki aplikasi utama, dashboard admin, API service, dan aplikasi mikro lainnya. Mengelola multiple aplikasi Node.js secara efisien menjadi tantangan tersendiri, terutama dalam hal konfigurasi port, keamanan, dan performa.
Salah satu solusi paling efektif adalah menggunakan reverse proxy. Artikel ini akan membahas secara komprehensif cara mengelola dan menjalankan multiple aplikasi Node.js di satu server menggunakan reverse proxy dengan Nginx.
Mengapa Reverse Proxy?
Reverse proxy berperan sebagai perantara antara klien dan server aplikasi. Berikut manfaatnya:
- Manajemen Port yang Lebih Baik – Semua aplikasi dapat diakses melalui port standar (80/443)
- Load Balancing – Mendistribusikan traffic ke beberapa instance aplikasi
- SSL Termination – Mengelola sertifikat SSL di satu tempat
- Caching – Meningkatkan performa dengan caching konten statis
- Keamanan – Menyembunyikan infrastruktur backend dari akses langsung

Install Nginx Web Server
Install nginx pada ubuntu 24.04 dengan menjalankan perintah dibawah.
sudo apt install nginx -y
Akses IP_Public di browser pastikan muncul halaman “Welcome to nginx” seperti gambar dibawah.

Deploy APP Node Js Ke Server
Buatkan sebuah direktori untuk app node js di /var/www/html .
cd /var/www/html
sudo mkdir app1
cd app1
git clone https://github.com/gaa46/Website-Simple-Node-Js.git
sudo mv Website-Simple-Node-Js/* .
sudo rm -r Website-Simple-Node-Js/

Ubah title dan h1 pada file index.html untuk membedakan setiap app node js.
sudo nano index.html

Ulangi untuk app2 dan app3, yang membedakan title, h1 dan port number. seperti toplogy diatas.
Configuration Reverse Proxy Nginx
Buatkan sebuah configuration untuk setiap masing app, berdasarkan domain.
sudo nano /etc/nginx/sites-available/app1.Nama-Domain.com
Masukan script dibawah
server {
listen 80;
server_name app1.Nama-Domain.com;# Pengaturan untuk log (opsional tapi direkomendasikan)
access_log /var/log/nginx/app1.Nama-Domain.com.access.log;
error_log /var/log/nginx/app1.Nama-Domain.com.error.log;location / {
# Meneruskan semua permintaan ke aplikasi Node.js yang berjalan di port 8080
proxy_pass http://127.0.0.1:8080;# Mengatur header penting agar aplikasi backend menerima informasi yang benar
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection ‘upgrade’;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
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;
}}

Buatkan symbolic link untuk configuration app1
sudo ln -s /etc/nginx/sites-available/app1.Nama-Domain.com /etc/nginx/sites-enabled/
Test configuration Nginx, apakah ada error.
sudo nginx -t
Enable dan Restart Reverse Proxy Nginx
sudo systemctl enable nginx
sudo systemctl restart nginx
Menjalankan aplikasi node js dengan PM2
Masuk ke app1 dengan menjalankan perintah dibawah
cd /var/www/html/app1
Karena app memerlukan module express, install menggunakan npm dan tunggu sampai proses selesai.
npm install express
Untuk menjalankan app1 menggunakan pm2
sudo pm2 start app.js –name APP1
Configuration DNS Record Cloudflare
Login ke dashboard Cloudflare, pilih TLD domain yang digunakan untuk app, masuk menu DNS Record dan Add Record.

Verification DNS Propagation
Masuk subdomain/ domain satu-satu, pastikan centang hijau.

Pengujian Akses App Node Js di Browser
Akses setiap subdomain pada browser menggunakan protocol http, pastikan tampil halaman seperti contoh dibawah ini.

Menambahkan SSL/TLS
Saat mengakses app node js dengan browser, secara default menggunakan protocol http artinya koneksi browser dengan server belum terenkripsi, SSL/TLS yang digunakan yaitu fitur dari cloudflare.
Pilih domain yang digunakan untuk app, SSL/TLS => Origin Server => Create Certificate => Masukan Domain yang akan di configuration http, ada dua opsi:
- Satu TLS/SSL bisa digunakan bersama-sama
- Satu TLS Certificate, satu domain.
Untuk configuration TLS disini satu domain-satu TLS, maka kita harus memasukan subdomain satu-persatu saat Create Certificate.

Membuat direktori baru dan file private-key, certificate di server. Masukan kode unik/ private key yang dibuat cloudflare.
sudo mkdir /etc/ssl/private/app1
sudo nano /etc/ssl/private/app1/key.pem
Masukan certificate yang dibuat cloudflare
sudo mkdir /etc/ssl/certs/app1
sudo nano /etc/ssl/certs/app1/cert.pem
Di server generate dhparam.pem
sudo openssl dhparam -out /etc/ssl/dhparam.pem 2048
Configuration SSL di NGINX
Membuat file options-ssl-nginx.conf.
sudo nano /etc/ssl/options-ssl-nginx.conf
Masukkan script berikut.
ssl_session_cache shared:nginx_SSL:10m;
ssl_session_timeout 1440m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
ssl_ciphers “ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCMSHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCMSHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-
POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCMSHA384:ECDHE-RSA-AES128-SHA”;
ssl_dhparam /etc/ssl/dhparam.pem;
Membuka file konfigurasi server block app1.Domain-Kamu.com.conf.
sudo nano /etc/nginx/sites-available/app1.Domain-Kamu.com.conf
Ganti configuration block nginx yang sebelumnya, dengan script dibawah.
server {
listen 80;
server_name app1.Domain-Kamu.com;# Pengalihan otomatis dari HTTP ke HTTPS
return 301 https://$host$request_uri;
}server {
listen 443 ssl http2;
server_name app1.Domain-Kamu.com;# Jalur file sertifikat SSL
ssl_certificate /etc/ssl/certs/app1/cert.pem;
ssl_certificate_key /etc/ssl/private/app1/key.pem;
include /etc/ssl/options-ssl-nginx.conf;# Pengaturan untuk log (opsional tapi direkomendasikan)
access_log /var/log/nginx/app1.Domain-Kamu.com.access.log;
error_log /var/log/nginx/app1.Domain-Kamu.com.error.log;location / {
# Alamat server backend yang dituju
proxy_pass http://127.0.0.1:8080;# Header penting agar backend mengenali identitas asli klien
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;
}
}

Restart Service Nginx.
sudo systemctl restart nginx
Enable Proxied pada subdomain yang digunakan untuk app.

Configuration Firewall UFW Server
Tujuan dari configuration UFW untuk memfilter traffic pada IP_Publix dan Port Number 8080, 8181, dan 8282 secara langsung saat diakses di browser, jadi untuk mengakses hanya menggunakan domain.
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
sudo ufw enable
Jika port ssh sudah tidak lagi 22, masukan perintah dibawah, dengan mengganti Port_Custom_SSH dengan number port.
sudo ufw allow Port_Custom_SSH/tcp
Browse http://app1.Domain-Kamu.com, secara otomatis redirect ke https://app1.Domain-Kamu.com. Untuk app2, app3 lakukan configuration sama seperti app1.
Mengelola multiple aplikasi Node.js di satu server menggunakan reverse proxy Nginx memberikan fleksibilitas, keamanan, dan performa yang optimal. Dengan arsitektur yang tepat.
Menjalankan beberapa aplikasi secara bersamaan, Menggunakan domain atau path yang berbeda dan Menerapkan SSL dengan mudah.
Mengoptimalkan resource server, Memudahkan proses deployment dan maintenance.
Implementasi reverse proxy tidak hanya menyederhanakan manajemen aplikasi tetapi juga membuka peluang untuk scaling dan optimasi lebih lanjut.

