NGINX Reverse Proxy - NGINX Documentation
Tags: node, nginx, devops, linux
Published: 2022-07-24 02:12:00

<u>1. Pengertian NGINX</u>
<u>2. Install NGINX</u>
<u>3. Install Aplikasi Web NodeJS (Express)</u>
<u>4. Penerapan Reserve Proxy</u>
<u>5. Penerapan Request Rate Limit</u>



![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zwfev13da5l8pude2lja.png)

## Apa itu Nginx?
Seperti penjelasan di atas, Nginx adalah web server berbasis open source yang memiliki keunggulan untuk membuat performa website kamu terlihat lebih canggih dan powerful. Salah satu kelebihan Nginx adalah mudah terkonfigurasi.

Nginx adalah web server yang pertama kali dirilis pada bulan Oktober 2004 oleh pria berkewarganegaraan Rusia, Igor Sysoev. Mulanya, fungsi Nginx adalah sebagai HTTP web serving saja. 

---

## Install NGINX di Linux
Saya akan menggunakan perintah di bawah ini, dengan penerapan menggunakan Ubuntu 22.04 LTS
```
sudo apt-get update
```

```
sudo apt-get install nginx -y
```

---

## Install Aplikasi Web NodeJS (Express)
Bikin direktori terlebih dahulu, dan selanjutnya install node_module di dalamnya
```
sudo su -
```

```
mkdir radenfebri
cd radenfebri
```
---
Gunakan npm initperintah untuk membuat package.jsonfile untuk aplikasi Anda. Untuk informasi selengkapnya tentang cara package.jsonkerjanya, lihat Spesifik penanganan package.json npm.
```
npm init
```
---
Perintah ini meminta Anda untuk beberapa hal, seperti nama dan versi aplikasi Anda. Untuk saat ini, Anda cukup menekan RETURN untuk menerima default untuk sebagian besar dari mereka, dengan pengecualian berikut:
```
entry point: (index.js)
```
---
Enter app.js, atau apa pun yang Anda inginkan untuk nama file utama. Jika Anda menginginkannya index.js, tekan RETURN untuk menerima nama file default yang disarankan.

Sekarang instal Express di myappdirektori dan simpan di daftar dependensi. Sebagai contoh:
```
npm install express
```
---
Untuk menginstal Express sementara dan tidak menambahkannya ke daftar dependensi:
```
npm install express --no-save
```
---
Untuk mencoba membuat web nya silahkan membuat file dengan perintah di bawah:
```
touch app.js
```
---
Pada tutorial ini saya menjalankan aplikasi web Express ini menggunakan port 8000, kalian bisa edit di bagian app.js, Edit di dalamnya seperti dokumentasi di bawah ini:
```
const express = require('express')
const app = express()
const port = 8000

app.get('/', (req, res) => {
  res.send('Hello World!')
})

app.listen(port, () => {
  console.log(`Example app listening on port ${port}`)
})
```
---
Langkah selanjutnya jalankan aplikasiny dengan cara ketikkan perintah di bawah:
```
node app.js
```
---

## Penerapan Reserve Proxy
Masuk ke direktori /etc/nginx/sites-available/default dan kemudian konfigurasi, nantinya aplikasi akan di akses melalui port 3000 dan port 3000 ini akan memanggil atau di reverse ke port 8000 yang ada pada localhost. Kurang lebihnya konfigurasi seperti di bawah ini:
```
sudo nano /etc/nginx/sites-available/default
```
```
server {
        listen 3000 default_server;
        listen [::]:3000 default_server;

	  root /var/www/html;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;SS


        location / {

                proxy_pass http://localhost:8000;
                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;

        }

      }
```
```
sudo service nginx restart 
```
---

## Penerapan Request Rate Limit
Rate Limit pada NGINX ini bisa digunakan untuk mengamankan sebuah web server agar si pengakses atau si penyerang website kita agar tidak terus-menerus mereka merequest packet dan jug digunakan untuk mengamankan bandwidth file pada webserver.
Masuk ke direktori /etc/nginx/sites-available/default
```
sudo nano /etc/nginx/sites-available/default
```
---
Tambahkan perintah di bawah ini:
```
limit_req_zone $binary_remote_addr zone=one:1m rate=6r/m;
```
---
Tambahkan perintah di bawah ini:
```
limit_req zone=one;
```
---

Full Code :
```
limit_req_zone $binary_remote_addr zone=one:1m rate=6r/m;

	server {
        listen 3000 default_server;
        listen [::]:3000 default_server;

	  root /var/www/html;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;SS


        location / {

                proxy_pass http://localhost:8000;
                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;

		    limit_req zone=one;

        }

      }
```
---
Lakukan Restart pada webserver NGINX agar bisa diterapkan Rate Limit dan berjalan normal kembali
```
sudo service nginx restart 
```