Basic Load Balancing
upstream backend {
server 10.0.0.1:3000;
server 10.0.0.2:3000;
server 10.0.0.3:3000;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
Load Balancing Methods
Round Robin (Default)
upstream backend {
server 10.0.0.1:3000;
server 10.0.0.2:3000;
}
Weighted Round Robin
upstream backend {
server 10.0.0.1:3000 weight=3;
server 10.0.0.2:3000 weight=1;
# Server 1 gets 3x the traffic
}
Least Connections
upstream backend {
least_conn;
server 10.0.0.1:3000;
server 10.0.0.2:3000;
}
IP Hash (Sticky Sessions)
upstream backend {
ip_hash;
server 10.0.0.1:3000;
server 10.0.0.2:3000;
# Same client IP always goes to same server
}
Least Time (Nginx Plus)
upstream backend {
least_time header; # or 'last_byte'
server 10.0.0.1:3000;
server 10.0.0.2:3000;
}
Server Parameters
upstream backend {
server 10.0.0.1:3000 weight=3; # 3x traffic
server 10.0.0.2:3000 backup; # Only if others fail
server 10.0.0.3:3000 down; # Marked as unavailable
server 10.0.0.4:3000 max_fails=3 fail_timeout=30s;
}
Health Checks (Passive)
upstream backend {
server 10.0.0.1:3000 max_fails=3 fail_timeout=30s;
server 10.0.0.2:3000 max_fails=3 fail_timeout=30s;
}
# max_fails: Number of failed requests before marking server unavailable
# fail_timeout: Time server is marked unavailable after max_fails
Complete Example
upstream api_servers {
least_conn;
server 10.0.0.1:3000 weight=2 max_fails=3 fail_timeout=30s;
server 10.0.0.2:3000 weight=2 max_fails=3 fail_timeout=30s;
server 10.0.0.3:3000 weight=1 max_fails=3 fail_timeout=30s;
server 10.0.0.4:3000 backup;
keepalive 32;
}
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://api_servers;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_next_upstream error timeout http_500 http_502 http_503;
proxy_connect_timeout 5s;
proxy_read_timeout 60s;
}
}
intermediate | Reverse Proxy | Updated 2025-01-15
- nginx
- load balancing
- upstream
- round robin
- health check