Apa itu Reverse Proxy
Sebelum masuk ke Nginx, kita kenali dulu istilah dasarnya.
Proxy server adalah server perantara yang meneruskan request dari client ke satu atau beberapa server tujuan. Sedangkan reverse proxy adalah varian di mana server perantara berada di sisi server — bertindak sebagai pintu depan antara client dan web server/aplikasi di belakangnya.
Client → Reverse Proxy (Nginx) → Backend App
Dengan reverse proxy, client tidak pernah menyentuh backend secara langsung.
Nginx sebagai Reverse Proxy
Nginx ringan dan mendukung proxy untuk berbagai protokol: HTTP, HTTPS, TCP, UDP, SMTP, IMAP, dan POP3.
Cara kerja
- Client mengakses domain yang dipasang di Nginx.
- Nginx menampung request tersebut.
- Nginx meneruskannya ke node backend yang sudah ditentukan (misal Node A).
- Node A membalas ke Nginx, lalu Nginx meneruskan respon ke client.
Manfaat
- Load Balancing — membagi traffic secara merata ke beberapa backend agar tidak ada satu server yang kelebihan beban.
- Web Acceleration — mengompresi data, menyimpan cache konten statis, dan mempercepat koneksi.
- Security & Anonymity — menyembunyikan identitas backend; client tidak bisa akses langsung ke node internal, sehingga menambah lapisan keamanan dari serangan langsung.
Contoh Reverse Proxy Dasar
Konfigurasi paling umum — arahkan satu domain ke aplikasi di belakangnya:
server {
listen 80;
server_name app.iqbwl.com;
location / {
proxy_pass http://127.0.0.1:3000;
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;
}
}Blok di atas meneruskan seluruh request ke aplikasi yang berjalan di port 3000 pada server yang sama.
Membagi Beban (Load Balancing)
Nginx dapat mendistribusikan request ke beberapa backend sekaligus. Jika satu node down, traffic dialihkan ke node lain yang sehat.
Round Robin
Metode default. Request dibagi bergiliran ke semua node secara merata.
upstream backend {
server 192.168.2.2; # Node A
server 192.168.2.3; # Node B
}Kelebihan: beban merata sempurna. Kelemahan: tidak memedulikan session — user yang login di Node A bisa "terlempar" ke Node B pada request berikutnya, menyebabkan logout atau error.
Least Connections
Mengarahkan request ke node dengan jumlah koneksi aktif paling sedikit, terlepas dari berat/ringannya tiap request.
upstream backend {
least_conn;
server 192.168.2.2; # Node A
server 192.168.2.3; # Node B
}Masih berpengaruh pada session, meski tidak sebesar Round Robin.
IP Hash
IP client di-hash untuk menentukan node tujuan. Client dengan IP sama akan selalu diarahkan ke node yang sama → session relatif aman tanpa konfigurasi tambahan.
upstream backend {
ip_hash;
server 192.168.2.2; # Node A
server 192.168.2.3; # Node B
}Generic Hash
Node tujuan ditentukan dari "key" apa pun yang dibawa client — bisa variabel, string, atau parameter request.
upstream backend {
hash $request_uri consistent;
server 192.168.2.2; # Node A
server 192.168.2.3; # Node B
}Kelemahan: kerataan beban kalah dari Round Robin/Least Conn, dan proses hashing menambah beban komputasi kecil pada Nginx.
Menjaga Session (Session Persistence)
Pada metode Round Robin dan Least Connections, Nginx tidak menyimpan state session. Agar user tidak terputus saat pindah node, gunakan session replication: simpan session di penyimpanan bersama (shared) antar node.
Beberapa opsi session handler:
- Memcached — penyimpanan cache berbasis memory, berjalan sebagai network service (default port
11211). - Redis — data structure store in-memory yang lazim dipakai sebagai cache, database, atau message broker.
Konfigurasi dilakukan di sisi aplikasi (misal PHP) dengan menjadikan Memcached/Redis sebagai session handler, sehingga session yang terbentuk di Node A otomatis tersedia di Node B.
Catatan: metode persistent session berbasis cookie lainnya (sticky sessions) hanya tersedia pada Nginx Plus (versi berbayar).