Cara menjalankan server Node.js dengan Nginx

Node.js adalah alat yang sangat penting untuk hampir semua jenis pengembangan dan pengiriman berbasis layanan mikro. Node.js juga merupakan alat terkemuka untuk membuat aplikasi server dalam JavaScript dan menawarkan fungsionalitas server web dan server aplikasi.

Tetapi Node.js memiliki beberapa kekurangan dan kerentanan yang dapat menyebabkan kinerja yang tidak memuaskan atau bahkan crash dalam aplikasi berbasis Node. Sebagai contoh, aplikasi web berbasis Node.js rentan terhadap eksekusi kode yang lambat atau bahkan crash karena operasi yang terikat IO atau pertumbuhan lalu lintas yang cepat. Aplikasi ini juga terkadang mengalami kesulitan dalam menyajikan konten statis seperti gambar dan berkas JavaScript serta menyeimbangkan beban di beberapa server.

Untungnya, Anda dapat menyimpan cache konten statis, proksi, dan menyeimbangkan beban di antara beberapa server aplikasi, serta mengelola porsi port di antara klien menggunakan Nginx. Hal ini membuat Nginx menjadi alat yang sangat baik untuk meningkatkan kinerja Node.js.

Dalam tutorial ini, kami akan menunjukkan kepada Anda cara menjalankan server dengan Nginx. Kita akan membahas instalasi dan konfigurasi Nginx dengan membangun aplikasi Node.js sederhana.

Untuk mengikutinya, Anda harus memiliki:

  • Pemahaman tentang bagaimana web, server web, dan browser web berkomunikasi
  • Pengetahuan dasar tentang JavaScript, Node.js, dan pemrograman asinkron
  • Node.js terinstal di mesin lokal Anda
  • Editor teks Vim yang terinstal di perangkat lokal Anda

Untuk mendemonstrasikan cara kerja Nginx dalam praktiknya, kita akan membuat aplikasi Node.js sederhana yang akan berjalan pada port 3000, yang merupakan port umum untuk menjalankan aplikasi Node. Teknik yang sama juga dapat digunakan untuk port lain yang tersedia di mesin lokal Anda.

Apa itu server dan server web?

Server adalah komputer yang berkomunikasi dengan komputer lain untuk melayani mereka dengan informasi yang diminta oleh komputer-komputer ini. Komputer-komputer ini, yang juga disebut klien, terhubung ke server melalui jaringan area lokal (LAN) atau jaringan area luas (WAN). Server mengirim dan mengumpulkan informasi di seluruh jaringan di beberapa lokasi.

Server di web, yang dikenal sebagai server web, melalui Hypertext Transfer Protocol (HTTP), menerima permintaan dari klien melalui internet, seperti browser, dan mengembalikan respons HTTP, baik dalam bentuk halaman web HTML atau dalam format JSON seperti halnya panggilan API.

Server web adalah fondasi dari setiap pertukaran data yang menggunakan HTTP sebagai protokol klien-server untuk komunikasi dengan komputer lain. Server web sebagai komputer melibatkan perangkat keras dan perangkat lunak dan merupakan komponen mendasar dalam pengembangan web. Sisi perangkat lunak terdiri dari bagian-bagian yang memahami URL dan mengontrol bagaimana pengguna web mengakses file yang dihosting.

Apa itu Nginx?

Menurut dokumentasinya, Nginx (diucapkan “engine X”) adalah sebuah server proksi HTTP dan reverse proxy, server proksi email, dan server proksi TCP/UDP umum, yang awalnya ditulis oleh Igor Sysoev.

Nginx digunakan untuk berbagai tugas yang berkontribusi untuk meningkatkan kinerja Node.js. Fitur-fitur utamanya meliputi:

  • Server proksi balik – Seiring dengan meningkatnya lalu lintas ke aplikasi Anda, pendekatan terbaik untuk meningkatkan kinerja adalah dengan menggunakan Nginx sebagai server proksi balik di depan server Node.js untuk menyeimbangkan lalu lintas di seluruh server. Ini adalah kasus penggunaan inti dari Nginx dalam aplikasi Node.js
  • Penyeimbangan beban tanpa nama – Ini meningkatkan kinerja sekaligus mengurangi beban pada layanan backend dengan mengirimkan permintaan klien untuk dipenuhi oleh server mana pun yang memiliki akses ke berkas yang diminta
  • Cache konten statis – Menyajikan konten statis dalam aplikasi Node.js dan menggunakan Nginx sebagai server proxy terbalik menggandakan kinerja aplikasi hingga maksimum 1.600 permintaan per detik
  • Menerapkan SSL/TLS dan HTTP/2 – Mengingat pergeseran baru-baru ini dari penggunaan SSL/TLS untuk mengamankan interaksi pengguna di aplikasi Node.js, Nginx juga mendukung koneksi HTTP/2
  • Pelacakan kinerja – Anda dapat memantau kinerja keseluruhan aplikasi Node.js Anda secara real-time menggunakan statistik yang disediakan di dasbor langsung Nginx
  • Skalabilitas – Bergantung pada aset apa yang Anda layani, Anda dapat memanfaatkan penyeimbangan beban HTTP, TCP, dan UDP berfitur lengkap di Nginx untuk meningkatkan aplikasi Node.js Anda

Menginstal Nginx

Kita akan menginstal Nginx menggunakan manajer paket default untuk sistem operasi berbasis Debian, yang disebut apt. Nginx juga tersedia untuk hampir semua sistem operasi di bawah repositori default mereka.

Sebelum menginstal Nginx, pastikan Anda telah menginstal prasyarat untuk OS Ubuntu.

Nanti dalam tutorial ini, kita akan mengonfigurasi Nginx berdasarkan kebutuhan unik proyek kita, lalu kita akan siap untuk mengimplementasikannya. Sekarang mari kita instal Nginx menggunakan apt.

sudo apt update
sudo apt install nginx

Dengan instalasi yang berhasil, pesan berikut ini akan ditampilkan pada terminal yang mengonfirmasi bahwa Nginx telah terinstal:

Thanks for using nginx!

Please find the official documentation for nginx here:
* https://nginx.org/en/docs/

Sebelum mengonfigurasi Nginx, mari kita siapkan dan bangun aplikasi Node.js kita dengan cepat.

Membuat aplikasi Node.js

Untuk aplikasi Node.js sederhana ini, kita akan membuat server Node.js dengan modul HTTP yang disediakan oleh Node.js. Mari kita mulai dengan membuat folder dan menginisialisasi proyek pada terminal:

mkdir 'nginX server project'
cd 'nginX server project'
npm init -y

Kode di atas akan membuat folder proyek server nginX dan mengubah direktori ke dalam folder tersebut. Kita kemudian menginisialisasi aplikasi Node.js dengan npm, menggunakan flag -y untuk mengatur “ya” sebagai jawaban default untuk semua pertanyaan.

Langkah selanjutnya adalah membuat berkas server.js yang berisi kode sumber untuk aplikasi kita dan membukanya dengan IDE atau editor teks pilihan Anda:

touch server.js
vim server.js
#or 
code .

Sekarang saatnya membangun dan memulai server. Mari kita tentukan dua subdomain tambahan sebagai sarana untuk menguji apakah aplikasi kita sudah berfungsi penuh:

const http = require("http");

const server = http.createServer((req, res) => {
  const urlPath = req.url;
  if (urlPath === "/overview") {
    res.end('Welcome to the "overview page" of the nginX project');
  } else if (urlPath === "/api") {
    res.writeHead(200, { "Content-Type": "application/json" });
    res.end(
      JSON.stringify({
        product_id: "xyz12u3",
        product_name: "NginX injector",
      })
    );
  } else {
    res.end("Successfully started a server");
  }
});

server.listen(3000, "localhost", () => {
  console.log("Listening for request");
});

Kita telah membuat server dengan modul HTTP Node.js yang diimpor dengan menggunakan fungsi require pada kode di atas. Di dalam server kita, kita akan merender dua respons yang berbeda, tergantung pada rute kita saat ini. Dua rute tersebut adalah /overview dan /api.

Pada subdomain /overview, kita akan merender teks biasa, sedangkan pada /api kita akan merender objek JSON. Domain default kita dengan alamat 127.0.0.1.1:3000, ditambah dengan dua rute yang kita buat, akan membantu kita memahami lebih jauh cara kerja Nginx.

Mari kita konfigurasikan Nginx untuk menguji coba server kita dari terminal.

Mengkonfigurasi Nginx

Pada akhir proses instalasi yang kita bahas sebelumnya, Ubuntu 20.04 memulai Nginx. Server seharusnya sudah aktif dan berjalan.

Buka peramban Anda dan arahkan ke alamat IP server Anda, di mana Anda dapat mengakses halaman arahan Nginx default untuk mengonfirmasi bahwa perangkat lunak ini berjalan dengan baik.

Agar Nginx dapat mendengarkan porta 3000 dari aplikasi Node.js kita, kita akan mengubah direktori menjadi /etc/nginx/sites-available, di mana kita akan membuat blok server yang berisi konfigurasi dengan arahan yang benar yang mengarah ke porta 3000:

cd /etc/nginx/sites-available
sudo cp default myserver 
 Setelah mengubah direktori menjadi /etc/nginx/sites-available, perintah kedua akan menyalin dan menempelkan konten konfigurasi Nginx default ke dalam berkas baru bernama myserver.

Selanjutnya, buka berkas tersebut dan tambahkan arahan yang sesuai ke port 3000:

sudo vim /etc/nginx/sites-available/myserver

Rekatkan pada blok konfigurasi berikut ini, yang mirip dengan default, tetapi diperbarui untuk port 3000:

#The Nginx server instance
server {
    listen 0.0.0.0:80;
    server_name localhost;

    location / {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_set_header X-NginX-Proxy true;

      proxy_pass http://127.0.0.1:3000/;
      proxy_redirect off;
    }

    location /overview {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_set_header X-NginX-Proxy true;

      proxy_pass http://127.0.0.1:3000/overview;
      proxy_redirect off;
    }

    location /api {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_set_header X-NginX-Proxy true;

      proxy_pass http://127.0.0.1:3000/api;
      proxy_redirect off;
    }
 }
 Simpan perubahan dan keluar dari berkas. Perhatikan bahwa kita telah membuat tiga lokasilagi dalam berkas konfigurasi di atas, yang sesuai dengan jalur yang telah ditentukan sebelumnya dalam aplikasi Node.js.

Untuk langkah berikutnya, mari kita aktifkan berkas di atas dengan membuat tautan dari berkas tersebut ke direktori yang diaktifkan untuk situs, yang dibaca oleh Nginx saat startup:

sudo ln -s /etc/nginx/sites-available/myserver /etc/nginx/sites-enabled/

Blok server sekarang telah diaktifkan dan dikonfigurasi untuk mengembalikan respons terhadap permintaan berdasarkan pada porta dengarkan dan arahan porta saat ini.

Sekarang saatnya untuk menjalankan aplikasi Node.js dan layanan Nginx untuk menerapkan perubahan terbaru. Tetapi pertama-tama, mari kita periksa status Nginx untuk mengonfirmasi bahwa konfigurasi telah bekerja dengan benar:

sudo nginx -t 

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
sudo systemctl restart nginx sudo systemctl start nginx

Buka terminal baru dan ubah direktori ke aplikasi Node.js. Sekarang jalankan aplikasi Anda menggunakan perintah berikut:

node server.js
 Buka peramban Anda dan akses aplikasi Node.js. Nginx saat ini seharusnya melayani porta aplikasi yang telah didefinisikan dalam berkas konfigurasi. Anda dapat mengujinya dengan menavigasi ke localhost/overview: Agar port default 127.0.0.1 dapat digunakan untuk aplikasi Node.js kita, kita perlu mengedit konfigurasi default Nginx untuk mengarahkan ke port lain. Kita akan menggunakan port 127.0.0.1:8080. Ubah direktori menjadi /etc/nginx/sites-available/ dan edit berkas default sebagai berikut:
...
  server {
      listen 8080 default_server;
      listen [::]:8080 default_server;
      ...
  }
...

Sekarang kita dapat menavigasi ke alamat 127.0.0.1 pada browser dan mengakses home port :3000 aplikasi kita:

 

Untuk menguji lebih lanjut bahwa setiap jalur lain yang telah kita tetapkan berfungsi, mari kita coba jalur terakhir, /api:

share artikel ini