Bird
Raised Fist0
Nginxdevops~5 mins

Weighted round-robin in Nginx - Commands & Configuration

Choose your learning style10 modes available
Introduction
When you have multiple servers to handle requests, you want to share the work fairly. Weighted round-robin lets you send more requests to stronger servers and fewer to weaker ones. This helps balance the load based on each server's capacity.
When you run a website on several servers with different power levels and want to use them efficiently.
When some servers are faster or have more resources and should get more traffic.
When you want to avoid overloading a small server while others are idle.
When you want simple load balancing without complex setup.
When you want to improve response times by using stronger servers more.
Config File - nginx.conf
nginx.conf
http {
    upstream myapp {
        server server1.example.com weight=3;
        server server2.example.com weight=1;
        server server3.example.com weight=2;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://myapp;
        }
    }
}

The upstream block defines a group of backend servers named myapp. Each server line includes a weight that tells NGINX how many requests to send relative to others. For example, server1 gets 3 times more requests than server2.

The server block listens on port 80 and forwards incoming requests to the myapp group using the weighted round-robin method.

Commands
Check the NGINX configuration file for syntax errors before applying changes.
Terminal
nginx -t
Expected OutputExpected
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Reload NGINX to apply the new weighted round-robin configuration without stopping the server.
Terminal
systemctl reload nginx
Expected OutputExpected
No output (command runs silently)
Send a simple request to the NGINX server to verify it is forwarding requests to backend servers.
Terminal
curl -I http://localhost
Expected OutputExpected
HTTP/1.1 200 OK Server: nginx Date: Wed, 01 Jan 2025 12:00:00 GMT Content-Type: text/html Content-Length: 612 Connection: keep-alive
Key Concept

Weighted round-robin lets you send more requests to stronger servers by assigning them higher weights in the load balancer.

Common Mistakes
Not setting weights on servers and expecting weighted behavior.
Without weights, NGINX uses simple round-robin, treating all servers equally.
Add the weight parameter to each server line to control traffic distribution.
Forgetting to test the configuration with 'nginx -t' before reloading.
Syntax errors can cause NGINX to fail to reload or crash.
Always run 'nginx -t' to verify configuration syntax before reloading.
Reloading NGINX without applying the new config file.
Reloading applies the current config; changes won't take effect if not saved.
Save the config file with weights before running 'systemctl reload nginx'.
Summary
Define backend servers with weights in the 'upstream' block to control request distribution.
Test the NGINX configuration syntax with 'nginx -t' before applying changes.
Reload NGINX to apply the weighted round-robin load balancing without downtime.

Practice

(1/5)
1. What does the weight parameter control in nginx's weighted round-robin load balancing?
easy
A. The maximum number of connections a server can handle
B. The timeout duration for server responses
C. The order in which servers are listed in the config
D. The number of requests sent to a server relative to others

Solution

  1. Step 1: Understand the role of weight in load balancing

    The weight defines how many requests a server receives compared to others.
  2. Step 2: Relate weight to request distribution

    Higher weight means more requests go to that server, balancing load by capacity.
  3. Final Answer:

    The number of requests sent to a server relative to others -> Option D
  4. Quick Check:

    Weight controls request share [OK]
Hint: Weight sets request share per server [OK]
Common Mistakes:
  • Confusing weight with timeout
  • Thinking weight limits connections
  • Assuming weight sets server order
2. Which of the following is the correct syntax to assign weights to servers in nginx for weighted round-robin?
easy
A. server backend1.example.com weight:3;
B. server backend1.example.com weight 3;
C. server backend1.example.com weight=3;
D. server backend1.example.com weight(3);

Solution

  1. Step 1: Recall nginx upstream server syntax

    Weights are assigned using weight=number with an equal sign and semicolon.
  2. Step 2: Check each option's syntax

    Only server backend1.example.com weight=3; uses the correct weight=3; format.
  3. Final Answer:

    server backend1.example.com weight=3; -> Option C
  4. Quick Check:

    Correct syntax uses equal sign and semicolon [OK]
Hint: Use weight=number; syntax for servers [OK]
Common Mistakes:
  • Omitting equal sign
  • Using colon instead of equal sign
  • Using parentheses incorrectly
3. Given this nginx upstream block:
upstream backend {
  server backend1.example.com weight=3;
  server backend2.example.com weight=1;
}
If 8 requests arrive, how many requests will backend2 receive approximately?
medium
A. 2
B. 6
C. 4
D. 1

Solution

  1. Step 1: Calculate total weight

    backend1 weight=3, backend2 weight=1, total = 4.
  2. Step 2: Calculate requests for backend2

    Requests for backend2 = (1/4) * 8 = 2.
  3. Final Answer:

    2 -> Option A
  4. Quick Check:

    Requests proportional to weight [OK]
Hint: Requests split by weight ratio [OK]
Common Mistakes:
  • Ignoring total weight sum
  • Assigning equal requests despite weights
  • Miscounting total requests
4. You configured nginx with weighted round-robin but all servers receive equal requests. What is the most likely cause?
medium
A. nginx does not support weighted round-robin
B. Weights were not specified correctly in the config
C. The servers have identical IP addresses
D. The upstream block is missing the weight directive

Solution

  1. Step 1: Understand weighted round-robin requires correct weight syntax

    If weights are missing or incorrect, nginx defaults to equal distribution.
  2. Step 2: Analyze the options

    Weights were not specified correctly in the config states weights not specified correctly, which explains equal requests.
  3. Final Answer:

    Weights were not specified correctly in the config -> Option B
  4. Quick Check:

    Incorrect weights cause equal load [OK]
Hint: Check weight syntax if load is equal [OK]
Common Mistakes:
  • Assuming nginx lacks weighted support
  • Confusing IP issues with load balancing
  • Missing weight directive entirely
5. You have three servers with weights 5, 3, and 2. You want to add a fourth server but keep the total weight sum at 10. What weight should you assign to the new server to maintain the same total weight and keep the relative proportions of the first three servers?
hard
A. 0 (do not add the server)
B. 5
C. 2
D. 1

Solution

  1. Step 1: Calculate current total weight

    Sum of existing weights = 5 + 3 + 2 = 10.
  2. Step 2: Determine weight for new server

    To keep total sum at 10 when adding a fourth server, assign weight=0 to it.
  3. Step 3: Verify proportions

    Weight=0 means no requests to the new server, so first three retain exact proportions (5:3:2 out of total 10).
  4. Final Answer:

    0 (do not add the server) -> Option A
  5. Quick Check:

    Weight=0 keeps total and proportions unchanged [OK]
Hint: Assign weight=0 to keep total sum and proportions [OK]
Common Mistakes:
  • Assigning positive weight that increases total sum
  • Forgetting to maintain exact total of 10
  • Ignoring impact on relative proportions
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard