🔄 Reverse Proxy
What Is a Reverse Proxy?
Imagine you're at a restaurant ordering food. You tell the waiter (Nginx) "I'd like the braised pork," the waiter goes to the kitchen (backend server) to get it, and serves it to you. You don't need to know where the kitchen is or how many chefs there are — the waiter handles everything.
A reverse proxy means: the client only knows about Nginx, not where the actual backend is.
Basic Reverse Proxy Configuration
nginx
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://127.0.0.1:3000; # Forward to Node.js
# Required request headers
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;
# Timeout settings
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
}WebSocket Proxy
nginx
location /ws/ {
proxy_pass http://127.0.0.1:3001;
# Required headers for WebSocket
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;
}Multi-Path Proxy
nginx
server {
listen 80;
server_name example.com;
# Frontend
location / {
root /var/www/frontend/dist;
try_files $uri $uri/ /index.html;
}
# Backend API
location /api/ {
proxy_pass http://127.0.0.1:3000/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# Admin panel
location /admin/ {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}