Nginx sebagai Reverse Proxy: Konfigurasi yang Wajib Kamu Tahu
Nginx bukan hanya web server — sebagai reverse proxy, ia adalah lapisan penting antara internet dan aplikasimu. Ini konfigurasi praktis yang langsung bisa dipakai.
Kenapa Nginx sebagai Reverse Proxy?
Reverse proxy menempatkan Nginx di depan server aplikasi kamu (Node.js, Laravel, dll). Keuntungannya: SSL termination di satu titik, load balancing, caching static assets, dan proteksi tambahan karena server aplikasi tidak terekspos langsung ke internet.
Instalasi di Ubuntu
sudo apt update && sudo apt install nginx -y
sudo systemctl enable --now nginx
Konfigurasi Dasar Reverse Proxy
# /etc/nginx/sites-available/khalimzone.com
server {
listen 80;
server_name khalimzone.com www.khalimzone.com;
location / {
proxy_pass http://localhost: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;
proxy_cache_bypass $http_upgrade;
}
}
sudo ln -s /etc/nginx/sites-available/khalimzone.com /etc/nginx/sites-enabled/
sudo nginx -t # test konfigurasi
sudo systemctl reload nginx
SSL dengan Certbot (Gratis)
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d khalimzone.com -d www.khalimzone.com
Certbot otomatis mengupdate konfigurasi Nginx untuk HTTPS dan mengatur auto-renewal certificate.
Optimasi Performa Penting
# Di dalam server block
gzip on;
gzip_types text/plain text/css application/json application/javascript;
gzip_min_length 1000;
# Cache static assets
location ~* .(jpg|jpeg|png|gif|ico|css|js|woff2)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
# Batas ukuran upload
client_max_body_size 10M;
Rate Limiting Sederhana
# Di blok http {}
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
# Di location block API
location /api/ {
limit_req zone=api burst=20 nodelay;
proxy_pass http://localhost:3000;
}
Load Balancing untuk Multiple Instance
upstream app_servers {
least_conn;
server localhost:3000;
server localhost:3001;
server localhost:3002;
}
server {
location / {
proxy_pass http://app_servers;
}
}