How to Use Weighted Load Balancing in Nginx
Use the
weight parameter inside the upstream block in Nginx to assign different traffic shares to servers. Higher weights mean more requests go to that server, enabling weighted load balancing.Syntax
The upstream block defines a group of backend servers. Each server directive inside it can have an optional weight parameter. The syntax is:
upstream backend_name {
server server1 weight=number;
server server2 weight=number;
...
}The weight is a positive integer that controls how much traffic each server receives relative to others.
nginx
upstream backend {
server backend1.example.com weight=3;
server backend2.example.com weight=1;
}Example
This example shows how to send 75% of traffic to backend1 and 25% to backend2 using weights 3 and 1 respectively.
nginx
http {
upstream backend {
server backend1.example.com weight=3;
server backend2.example.com weight=1;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}Common Pitfalls
- Forgetting to set weights: If weights are omitted, all servers get equal traffic.
- Using zero or negative weights: Weights must be positive integers; zero or negative values are invalid.
- Not reloading Nginx: Changes to the config require
nginx -s reloadto apply. - Ignoring server health: Weighted load balancing does not replace health checks; unhealthy servers may still receive traffic unless configured.
nginx
## Wrong way (weight=0 disables server): upstream backend { server backend1.example.com weight=0; server backend2.example.com weight=2; } ## Right way: upstream backend { server backend1.example.com weight=1; server backend2.example.com weight=2; }
Quick Reference
| Directive | Description | Example |
|---|---|---|
| upstream | Defines a group of backend servers | upstream backend { ... } |
| server | Specifies a backend server with optional weight | server backend1.example.com weight=3; |
| weight | Assigns relative traffic share to a server | weight=2 |
| proxy_pass | Sends client requests to the upstream group | proxy_pass http://backend; |
Key Takeaways
Use the weight parameter inside upstream server blocks to control traffic distribution.
Weights must be positive integers; higher weights get more requests.
Reload Nginx after config changes to apply weighted load balancing.
Weighted load balancing does not replace health checks for backend servers.
If weights are omitted, traffic is distributed evenly among servers.