Menjalankan Multiple Aplikasi Node Js
Menjalankan Multiple Aplikasi Node Js

Menjalankan Multiple Aplikasi Node Js di Satu Server dengan Reverse Proxy

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:

  1. Manajemen Port yang Lebih Baik – Semua aplikasi dapat diakses melalui port standar (80/443)
  2. Load Balancing – Mendistribusikan traffic ke beberapa instance aplikasi
  3. SSL Termination – Mengelola sertifikat SSL di satu tempat
  4. Caching – Meningkatkan performa dengan caching konten statis
  5. Keamanan – Menyembunyikan infrastruktur backend dari akses langsung
Topology Running Multiple App Node Js
Topology Running Multiple App Node Js

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.

Pengujian Nginx Web Server Ubuntu 24.04
Pengujian Nginx Web Server Ubuntu 24.04

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/

Deploy Web Node Js
Deploy Web Node Js

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

sudo nano index.html

Modifikasi Halaman Index untuk setiap app
Modifikasi Halaman Index untuk setiap app

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;
}

}

Configuration Reverse Proxy Nginx app1
Configuration Reverse Proxy Nginx app1

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.

Add DNS Record Cloudflare app
Add DNS Record Cloudflare app

Verification DNS Propagation

Masuk subdomain/ domain satu-satu, pastikan centang hijau.

DNS Propagation Checker
DNS Propagation Checker

Pengujian Akses App Node Js di Browser

Akses setiap subdomain pada browser menggunakan protocol http, pastikan tampil halaman seperti contoh dibawah ini.

Akses Website Multisite Node Js
Akses Website Multisite Node Js

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:

  1. Satu TLS/SSL bisa digunakan bersama-sama
  2. Satu TLS Certificate, satu domain.

Untuk configuration TLS disini satu domain-satu TLS, maka kita harus memasukan subdomain satu-persatu saat Create Certificate.

Create Certificate TLS Origin Server
Create Certificate TLS Origin Server

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;
}
}

Configuration Block Nginx Reverse Proxy HTTPS
Configuration Block Nginx Reverse Proxy HTTPS

Restart Service Nginx.

sudo systemctl restart nginx

Enable Proxied pada subdomain yang digunakan untuk app.

Enable Proxied pada DNS Record Cloudflare
Enable Proxied pada DNS Record Cloudflare

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.