Reverse Proxy dengan Nginx: Pengertian dan Cara Kerjanya

Reverse Proxy dengan Nginx: Pengertian dan Cara Kerjanya

Reverse Proxy dengan Nginx: Pengertian dan Cara Kerjanya
29 menit baca

Ketika mengakses sebuah website, kita biasanya hanya perlu mengetikkan alamat website melalui browser, kemudian halaman akan ditampilkan. Namun, di balik proses sederhana tersebut, terdapat beberapa komponen server yang bekerja untuk menerima, memproses, dan mengirimkan permintaan dari pengunjung.

Salah satu teknologi yang sering digunakan untuk mengatur proses tersebut adalah Reverse Proxy. Teknologi ini membantu server mengelola permintaan pengunjung sebelum meneruskannya ke aplikasi yang sebenarnya.

Salah satu software yang populer untuk menjalankan fungsi tersebut adalah Nginx. Selain dikenal sebagai web server, Nginx juga banyak digunakan sebagai reverse proxy karena ringan, cepat, dan mampu menangani banyak koneksi secara bersamaan.

Lalu, apa sebenarnya reverse proxy? Mengapa banyak website dan aplikasi menggunakannya? Bagaimana cara kerjanya ketika dikombinasikan dengan Nginx?

Mari kita bahas secara bertahap.

1. Apa Itu Reverse Proxy?

Reverse proxy adalah server perantara yang menerima permintaan dari pengunjung, kemudian meneruskan permintaan tersebut ke server aplikasi yang berada di belakangnya.

Untuk memahami konsep ini, bayangkan sebuah kantor yang memiliki petugas resepsionis. Ketika seseorang datang, resepsionis akan menerima kedatangannya, menanyakan keperluannya, lalu mengarahkannya ke bagian yang tepat.

Pengunjung tidak perlu mengetahui secara langsung siapa orang yang akan menangani kebutuhannya. Mereka cukup berkomunikasi melalui resepsionis.

Reverse proxy bekerja dengan konsep yang hampir sama. Pengunjung mengakses website melalui satu alamat utama, kemudian reverse proxy menentukan server aplikasi mana yang harus menerima permintaan tersebut.

Sebagai contoh, sebuah server memiliki beberapa aplikasi:

  • Website utama berjalan pada port 3000.

  • Aplikasi dashboard berjalan pada port 4000.

  • API berjalan pada port 5000.

Tanpa reverse proxy, pengunjung mungkin harus mengakses aplikasi menggunakan alamat dan port yang berbeda.

Dengan reverse proxy, seluruh aplikasi tersebut dapat diakses melalui satu domain menggunakan aturan tertentu.

Contohnya:

  • https://example.com diarahkan ke aplikasi pada port 3000.

  • https://example.com/dashboard diarahkan ke aplikasi pada port 4000.

  • https://example.com/api diarahkan ke aplikasi pada port 5000.

Dengan begitu, pengunjung tidak perlu mengetahui port internal yang digunakan oleh masing-masing aplikasi.

2. Apa Perbedaan Reverse Proxy dan Forward Proxy?

Istilah reverse proxy sering kali membingungkan karena terdapat teknologi lain yang disebut forward proxy.

Keduanya sama-sama berfungsi sebagai perantara komunikasi jaringan, tetapi memiliki tujuan dan posisi yang berbeda.

Forward Proxy

Forward proxy bekerja atas nama pengguna atau perangkat yang ingin mengakses server lain melalui internet.

Contohnya, sebuah perusahaan menggunakan proxy server untuk mengatur akses internet karyawan. Ketika karyawan membuka website, permintaan akan melewati proxy terlebih dahulu sebelum diteruskan ke website tujuan.

Forward proxy biasanya digunakan untuk:

  • Mengatur akses internet pengguna.

  • Membatasi website tertentu.

  • Menyembunyikan alamat IP pengguna dari server tujuan.

  • Melakukan pemantauan lalu lintas jaringan.

Reverse Proxy

Reverse proxy bekerja atas nama server. Ketika pengunjung mengakses website, permintaan akan diterima oleh reverse proxy sebelum diteruskan ke aplikasi yang berada di belakangnya.

Reverse proxy biasanya digunakan untuk:

  • Mendistribusikan permintaan ke beberapa aplikasi.

  • Menyembunyikan struktur internal server.

  • Mengelola koneksi HTTPS.

  • Meningkatkan keamanan aplikasi.

  • Membantu mengatur beban server.

Perbedaan sederhananya adalah forward proxy berada di sisi pengguna, sedangkan reverse proxy berada di sisi server.

3. Bagaimana Cara Kerja Reverse Proxy?

Untuk memahami cara kerjanya, kita bisa menggunakan contoh aplikasi web yang berjalan pada server Linux.

Misalnya, sebuah aplikasi Next.js berjalan pada port 3000. Aplikasi tersebut dapat diakses secara lokal melalui http://localhost:3000.

Namun, kita tidak ingin pengunjung mengakses aplikasi menggunakan alamat IP server dan port 3000 secara langsung. Kita ingin pengunjung cukup membuka domain https://example.com.

Di sinilah Nginx berperan sebagai reverse proxy.

Alur sederhananya adalah:

  1. Pengunjung membuka https://example.com melalui browser.

  2. Permintaan diterima oleh Nginx pada server.

  3. Nginx membaca konfigurasi domain dan aturan penerusan permintaan.

  4. Nginx meneruskan permintaan ke aplikasi Next.js pada localhost:3000.

  5. Aplikasi Next.js memproses permintaan dan menghasilkan respons.

  6. Respons dikirim kembali ke Nginx.

  7. Nginx meneruskan respons tersebut kepada browser pengunjung.

Dengan proses tersebut, pengunjung hanya berkomunikasi dengan Nginx. Aplikasi utama tetap berjalan di belakangnya.

Ilustrasi Alur Reverse Proxy

Pengunjung → Nginx Reverse Proxy → Aplikasi Web → Nginx → Pengunjung

Nginx bertindak sebagai pintu masuk utama untuk seluruh permintaan yang datang dari luar server.

4. Mengapa Menggunakan Nginx sebagai Reverse Proxy?

Nginx merupakan salah satu software yang banyak digunakan untuk mengelola lalu lintas website dan aplikasi web.

Selain berfungsi sebagai web server, Nginx memiliki kemampuan reverse proxy yang memungkinkan sebuah server mengatur komunikasi dengan satu atau beberapa aplikasi sekaligus.

Berikut beberapa alasan mengapa Nginx sering digunakan.

A. Mengakses Banyak Aplikasi dalam Satu Server

Satu VPS dapat menjalankan beberapa aplikasi sekaligus. Setiap aplikasi dapat menggunakan port internal yang berbeda.

Misalnya:

Aplikasi Port Internal Alamat Akses
Website Next.js 3000 example.com
Dashboard 4000 dashboard.example.com
REST API 5000 api.example.com
Aplikasi Laravel 8000 laravel.example.com

Nginx dapat mengatur setiap domain atau alamat tertentu agar diarahkan ke aplikasi yang sesuai.

Dengan cara ini, kita tidak perlu menyediakan satu VPS untuk setiap aplikasi selama kapasitas server masih mencukupi.

B. Meningkatkan Keamanan Server

Reverse proxy dapat membantu melindungi aplikasi dengan membatasi akses langsung dari internet ke layanan internal.

Sebagai contoh, aplikasi Next.js yang berjalan pada port 3000 tidak harus membuka port tersebut untuk akses publik. Nginx cukup menerima koneksi dari luar melalui port 80 dan 443, kemudian meneruskan permintaan ke aplikasi melalui jaringan lokal.

Dengan konfigurasi firewall yang tepat, port aplikasi dapat dibatasi agar hanya bisa diakses dari server itu sendiri.

Hal ini membantu mengurangi permukaan serangan dan membuat pengelolaan akses lebih terkontrol.

Namun, reverse proxy bukan pengganti firewall, autentikasi, maupun pembaruan keamanan aplikasi.

C. Mengelola SSL dan HTTPS

Nginx dapat menangani koneksi HTTPS dari pengunjung.

Sebagai contoh, pengunjung mengakses website melalui https://example.com. Nginx menerima koneksi terenkripsi tersebut, kemudian meneruskan permintaan ke aplikasi internal melalui HTTP pada jaringan lokal.

Proses ini sering disebut SSL termination atau TLS termination.

Dengan pendekatan tersebut, kita dapat mengelola sertifikat SSL pada satu titik, tanpa harus mengatur sertifikat secara terpisah pada setiap aplikasi.

Perlu diperhatikan bahwa komunikasi antara Nginx dan aplikasi internal tetap harus diamankan jika melewati jaringan yang tidak sepenuhnya tepercaya.

D. Load Balancing

Nginx juga dapat digunakan untuk membagi permintaan pengunjung ke beberapa server aplikasi.

Misalnya, sebuah website memiliki tiga instance aplikasi yang berjalan secara bersamaan:

  • Server aplikasi pertama: localhost:3000

  • Server aplikasi kedua: localhost:3001

  • Server aplikasi ketiga: localhost:3002

Nginx dapat membagi permintaan ke beberapa instance tersebut menggunakan fitur load balancing.

Tujuannya adalah mengurangi beban pada satu server aplikasi dan membantu meningkatkan kemampuan sistem dalam menangani banyak pengunjung.

E. Menyederhanakan Pengelolaan Aplikasi

Dengan reverse proxy, pengunjung tidak perlu mengetahui detail teknis seperti alamat IP internal, nomor port, atau teknologi yang digunakan aplikasi.

Kita juga dapat mengubah aplikasi tujuan di belakang Nginx tanpa harus mengubah alamat domain yang digunakan pengunjung, selama aturan routing dan kompatibilitas aplikasinya tetap sesuai.

5. Contoh Penggunaan Nginx sebagai Reverse Proxy

Sekarang kita akan mencoba konfigurasi sederhana untuk mengarahkan domain ke aplikasi web yang berjalan pada port 3000.

Dalam contoh ini, kita menggunakan:

  • Sistem operasi: Ubuntu Linux.

  • Web server: Nginx.

  • Domain: example.com.

  • Aplikasi: Next.js.

  • Port aplikasi: 3000.

Pastikan aplikasi sudah berjalan dan dapat diakses melalui http://localhost:3000.

Langkah 1: Instal Nginx

Jalankan perintah berikut pada terminal server Ubuntu:

sudo apt update
sudo apt install nginx -y

Setelah instalasi selesai, jalankan dan aktifkan Nginx:

sudo systemctl start nginx
sudo systemctl enable nginx

Periksa status Nginx:

sudo systemctl status nginx

Jika layanan berjalan dengan baik, Nginx siap digunakan.

Langkah 2: Membuat Konfigurasi Reverse Proxy

Buat file konfigurasi baru untuk domain yang akan digunakan:

sudo nano /etc/nginx/sites-available/example.com

Masukkan konfigurasi berikut:

server {
    listen 80;
    server_name example.com www.example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;

        proxy_http_version 1.1;

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

Penjelasan beberapa bagian konfigurasi:

  • listen 80: Nginx menerima koneksi HTTP melalui port 80.

  • server_name: Menentukan domain yang menggunakan konfigurasi tersebut.

  • location /: Menentukan aturan untuk permintaan yang masuk melalui alamat utama.

  • proxy_pass: Menentukan alamat aplikasi tujuan.

  • proxy_set_header: Meneruskan informasi permintaan pengunjung kepada aplikasi.

Header seperti X-Real-IP dan X-Forwarded-For membantu aplikasi mengetahui alamat IP asli pengunjung ketika permintaan melewati reverse proxy.

Langkah 3: Mengaktifkan Konfigurasi

Setelah file konfigurasi dibuat, aktifkan konfigurasi tersebut menggunakan symbolic link:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

Kemudian periksa apakah konfigurasi Nginx memiliki kesalahan:

sudo nginx -t

Jika hasilnya menunjukkan bahwa konfigurasi berhasil, muat ulang Nginx:

sudo systemctl reload nginx

Sekarang, ketika pengunjung membuka domain example.com, Nginx akan meneruskan permintaan ke aplikasi yang berjalan pada port 3000.

Pastikan domain sudah mengarah ke alamat IP publik VPS melalui pengaturan DNS.

Langkah 4: Mengaktifkan HTTPS

Untuk mengaktifkan HTTPS, kita dapat menggunakan Let's Encrypt melalui Certbot.

Instal Certbot:

sudo apt install certbot python3-certbot-nginx -y

Kemudian jalankan:

sudo certbot --nginx -d example.com -d www.example.com

Ikuti instruksi yang ditampilkan hingga proses penerbitan sertifikat selesai.

Setelah berhasil, Certbot dapat membantu menambahkan konfigurasi HTTPS ke Nginx.

Pastikan port 80 dan 443 dapat diakses dari internet serta DNS domain sudah mengarah ke VPS.

6. Contoh Mengarahkan Beberapa Aplikasi dengan Nginx

Salah satu kelebihan reverse proxy adalah kemampuannya mengelola beberapa aplikasi dalam satu server.

Sebagai contoh, kita memiliki tiga aplikasi:

  • Website utama menggunakan Next.js pada port 3000.

  • Dashboard internal menggunakan Node.js pada port 4000.

  • REST API menggunakan Express.js pada port 5000.

Kita dapat membuat konfigurasi Nginx seperti berikut:

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
    }
}

server {
    listen 80;
    server_name dashboard.example.com;

    location / {
        proxy_pass http://127.0.0.1:4000;
    }
}

server {
    listen 80;
    server_name api.example.com;

    location / {
        proxy_pass http://127.0.0.1:5000;
    }
}

Dengan konfigurasi tersebut, ketiga aplikasi dapat diakses melalui domain masing-masing meskipun berjalan pada satu VPS.

Untuk penggunaan production, konfigurasi ini sebaiknya dilengkapi dengan header proxy, pengaturan HTTPS, serta aturan keamanan yang sesuai dengan kebutuhan aplikasi.

7. Apa Perbedaan Reverse Proxy dan Web Server?

Nginx sering disebut sebagai web server sekaligus reverse proxy. Hal ini terkadang membuat pengguna baru menganggap keduanya adalah hal yang sama.

Sebenarnya, web server dan reverse proxy merupakan dua fungsi yang berbeda.

Web server bertugas menerima permintaan HTTP dan mengirimkan konten kepada pengunjung. Konten tersebut bisa berupa file HTML, CSS, JavaScript, gambar, atau hasil pemrosesan aplikasi.

Sementara itu, reverse proxy bertugas menerima permintaan dan meneruskannya ke server atau aplikasi lain.

Sebagai contoh:

  • Nginx sebagai web server dapat langsung menyajikan file HTML dan gambar dari folder website.

  • Nginx sebagai reverse proxy dapat meneruskan permintaan ke aplikasi Next.js yang berjalan pada port 3000.

Nginx dapat menjalankan kedua fungsi tersebut secara bersamaan sesuai dengan konfigurasi yang dibuat.

8. Hal yang Perlu Diperhatikan Saat Menggunakan Reverse Proxy

Meskipun reverse proxy memberikan banyak manfaat, ada beberapa hal yang perlu diperhatikan agar konfigurasi berjalan dengan baik.

A. Pastikan Aplikasi Berjalan

Reverse proxy tidak akan membuat aplikasi berjalan secara otomatis.

Jika aplikasi pada port 3000 berhenti, Nginx tidak memiliki tujuan yang dapat memberikan respons. Akibatnya, pengunjung mungkin akan menerima pesan error seperti 502 Bad Gateway.

Pastikan aplikasi memiliki process manager seperti PM2 untuk membantu menjaga proses aplikasi tetap berjalan.

B. Perhatikan Pengaturan Firewall

Jangan membuka semua port aplikasi ke internet tanpa alasan yang jelas.

Jika Nginx menjadi pintu masuk utama, umumnya pengunjung hanya perlu mengakses port 80 dan 443. Port internal aplikasi dapat dibatasi agar hanya menerima koneksi dari localhost atau jaringan internal yang memang diperlukan.

C. Periksa Konfigurasi Header

Aplikasi yang berjalan di belakang reverse proxy perlu mengetahui informasi permintaan asli, seperti protokol HTTPS dan alamat IP pengunjung.

Gunakan header proxy yang sesuai dan pastikan aplikasi hanya mempercayai proxy yang memang berada dalam kendali Anda. Konfigurasi kepercayaan proxy yang terlalu longgar dapat menyebabkan informasi alamat IP atau protokol tidak akurat.

D. Perhatikan WebSocket

Beberapa aplikasi menggunakan WebSocket untuk komunikasi real-time, seperti notifikasi langsung, live chat, atau dashboard yang diperbarui secara otomatis.

Jika aplikasi menggunakan WebSocket, Nginx perlu dikonfigurasi agar dapat meneruskan koneksi tersebut dengan benar.

Contoh konfigurasi tambahannya:

location / {
    proxy_pass http://127.0.0.1:3000;

    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

    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 ini dapat digunakan untuk aplikasi yang membutuhkan koneksi WebSocket, tetapi header Connection sebaiknya disesuaikan dengan kebutuhan aplikasi dan pola koneksinya.

9. Kesimpulan

Reverse proxy merupakan teknologi yang sangat berguna untuk mengelola lalu lintas antara pengunjung dan aplikasi yang berjalan di server.

Dengan menggunakan Nginx sebagai reverse proxy, kita dapat menjalankan beberapa aplikasi dalam satu VPS, mengatur domain, mengelola koneksi HTTPS, meningkatkan kontrol keamanan, dan mendistribusikan beban permintaan ke beberapa server aplikasi.

Teknologi ini sangat cocok digunakan untuk aplikasi berbasis Node.js, Next.js, Laravel, Express.js, maupun berbagai aplikasi web lainnya.

Bagi developer atau administrator server yang mengelola beberapa website dan aplikasi, memahami reverse proxy merupakan salah satu kemampuan dasar yang penting. Dengan konfigurasi yang tepat, pengelolaan server dapat menjadi lebih terstruktur, fleksibel, dan mudah dikembangkan.

Applicanity membantu bisnis membangun dan mengembangkan solusi digital, mulai dari website hingga aplikasi berbasis kebutuhan bisnis.

Bagikan:

Rekomendasi untuk Anda