Episode ini menjelaskan konsep forward proxy versus reverse proxy, konfigurasi dasar proxy_pass, penerusan header penting ke backend, serta manajemen timeout dan buffering koneksi proxy.

Inilah salah satu peran NGINX yang paling banyak dipakai di industri: reverse proxy. Aplikasi modern seperti Node.js, Go, Python, dan Java hampir selalu disembunyikan di balik NGINX, baik untuk keamanan, performa, maupun fleksibilitas. Episode 6 ini membahas konsep dan konfigurasinya.
Kalian akan memahami apa beda forward proxy dengan reverse proxy, menulis directive proxy_pass yang benar, meneruskan header penting agar aplikasi tahu alamat asli klien, serta mengatur timeout dan buffering agar koneksi proxy stabil di produksi.
Forward proxy berdiri di depan klien. Browser memakai proxy untuk keluar ke internet; server di luar hanya melihat alamat proxy, bukan alamat klien. Contohnya proxy kantor atau layanan VPN berbasis proxy.
Reverse proxy berdiri di depan server. Klien mengakses domain public, NGINX meneruskan request ke backend, dan aplikasi tidak pernah terekspos langsung ke internet. Manfaatnya:
server {
listen 80;
server_name app.example.com;
location / {
proxy_pass http://localhost:3000;
}
}Setiap request ke app.example.com diteruskan ke aplikasi yang berjalan di port 3000.
Directive proxy_pass bisa menulis ulang URI saat diteruskan. Perbedaan halus berikut sering mengecoh:
location / {
proxy_pass http://localhost:3000;
}
location /api/ {
proxy_pass http://localhost:3000;
}
location /static/ {
proxy_pass http://localhost:3000/assets/;
}Ketika proxy_pass tidak memakai path (seperti http://localhost:3000), URI request diteruskan apa adanya. Ketika memakai path (seperti /assets/), bagian URI yang cocok dengan location diganti. Ini aturan yang harus kalian pegang erat.
NGINX juga menerima variabel pada proxy_pass, misalnya saat backend dipilih berdasarkan header:
server {
listen 80;
server_name app.example.com;
set $backend http://localhost:3000;
location / {
proxy_pass $backend;
}
}Ingat: begitu proxy_pass memakai variabel, NGINX tidak lagi melakukan penulisan ulang URI otomatis. Selalu uji kombinasi ini dengan nginx -t.
Tanpa penerusan header, aplikasi tidak akan tahu dari mana request datang:
location / {
proxy_pass http://localhost: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;
}Host $host — nama domain yang diminta klien.X-Real-IP — IP asli klien.X-Forwarded-For — daftar IP di belakang proxy.X-Forwarded-Proto — skema asli, http atau https.Banyak framework membaca header ini untuk logging, rate limiting per IP, dan membuat URL absolut. Jangan pernah mengirimnya tanpa verifikasi, karena aplikasi yang menganggap X-Forwarded-For bisa dimanipulasi rawan spoofing.
Backend yang lambat bisa menggantung worker NGINX. Atur batas waktunya:
location / {
proxy_pass http://localhost:3000;
proxy_connect_timeout 10s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;
}proxy_connect_timeout — batas waktu membuat koneksi ke backend.proxy_read_timeout — batas waktu menunggu respons dari backend.proxy_send_timeout — batas waktu mengirim request ke backend.NGINX menampung respons backend di buffer sebelum dikirim ke klien:
location / {
proxy_pass http://localhost:3000;
proxy_buffering on;
proxy_buffer_size 8k;
proxy_buffers 8 8k;
}Buffering membuat klien lambat tidak menahan backend. Untuk aplikasi realtime seperti SSE atau streaming, buffering justru dimatikan — detailnya ada di episode 13.
Episode 6 memantapkan peran NGINX sebagai reverse proxy: kalian memahami perbedaan forward dan reverse proxy, menulis proxy_pass dengan dan tanpa path, meneruskan header penting, serta mengatur timeout dan buffering.
Inti yang harus dibawa pulang:
proxy_pass tanpa path meneruskan URI asli; dengan path menulis ulang URI.Host, X-Real-IP, X-Forwarded-For, dan X-Forwarded-Proto.X-Forwarded-For dari luar tanpa validasi.Di episode 7 selanjutnya kita akan membahas load balancing algorithms dan upstream management — mendefinisikan cluster backend dengan block upstream, algoritma round robin, least connections, IP hash, dan generic hash, plus health check pasif dan state server.