Bird
Raised Fist0
Nginxdevops~10 mins

Round-robin (default) in Nginx - Step-by-Step Execution

Choose your learning style10 modes available
Process Flow - Round-robin (default)
Client Request Arrives
↓
Select Next Server in List
↓
Forward Request to Selected Server
↓
Wait for Next Request
↩Back to Select Next Server
The load balancer receives each client request and forwards it to the next server in the list, cycling through servers evenly.
Execution Sample
Nginx
upstream backend {
    server backend1.example.com;
    server backend2.example.com;
}

server {
    location / { proxy_pass http://backend; }
}
This config sets up two backend servers and uses round-robin to distribute requests between them.
Process Table
Request NumberSelected ServerActionResult
1backend1.example.comForward requestRequest sent to backend1
2backend2.example.comForward requestRequest sent to backend2
3backend1.example.comForward requestRequest sent to backend1
4backend2.example.comForward requestRequest sent to backend2
5backend1.example.comForward requestRequest sent to backend1
💡 Cycle repeats after last server; round-robin continues indefinitely
Status Tracker
VariableStartAfter 1After 2After 3After 4After 5
Current Server Index010101
Key Moments - 2 Insights
Why does the server selection go back to backend1 after backend2?
Because round-robin cycles through the server list in order, after reaching the last server (backend2), it starts again from the first (backend1), as shown in execution_table rows 3 and 4.
Does round-robin consider server load or response time?
No, round-robin simply cycles through servers evenly without checking load or speed, so each request is sent to the next server in the list regardless of its state.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, which server handles the 4th request?
Abackend1.example.com
Bbackend2.example.com
Cbackend3.example.com
DNo server handles the 4th request
💡 Hint
Check the 'Selected Server' column for Request Number 4 in the execution_table.
At which request does the server selection index reset to 0?
AAfter Request 2
BAfter Request 3
CAfter Request 1
DAfter Request 5
💡 Hint
Look at the 'Current Server Index' in variable_tracker after each request.
If a third server is added, how will the selection change for the 6th request?
AIt will go back to backend1.example.com
BIt will skip the new server and select backend2.example.com
CIt will select the new third server
DIt will cause an error
💡 Hint
Round-robin cycles through all servers in order; adding a server adds it to the cycle.
Concept Snapshot
Round-robin load balancing in nginx cycles through backend servers in order.
Each new request goes to the next server in the list.
No server load or health checks affect selection by default.
Config example:
upstream backend { server backend1; server backend2; }
Requests rotate: backend1 -> backend2 -> backend1 -> ...
Full Transcript
Round-robin is the default method nginx uses to distribute client requests among backend servers. When a request arrives, nginx forwards it to the next server in the list, cycling through all servers evenly. This means the first request goes to the first server, the second to the second server, and so on. After the last server is used, nginx starts again from the first server. This cycle repeats indefinitely. The configuration defines the backend servers inside an upstream block. The proxy_pass directive sends requests to this upstream group. Round-robin does not consider server load or response time; it simply distributes requests evenly in order.

Practice

(1/5)
1. What does the default round-robin method in nginx do when balancing requests?
easy
A. It sends requests based on server load automatically.
B. It sends all requests to the first server until it fails.
C. It sends requests randomly to any server.
D. It sends each new request to the next server in the list, cycling through them.

Solution

  1. Step 1: Understand round-robin behavior in nginx

    Round-robin means distributing requests evenly by cycling through servers one by one.
  2. Step 2: Match behavior to options

    Only It sends each new request to the next server in the list, cycling through them. describes cycling through servers for each new request.
  3. Final Answer:

    It sends each new request to the next server in the list, cycling through them. -> Option D
  4. Quick Check:

    Round-robin = cycling requests evenly [OK]
Hint: Round-robin cycles through servers one by one [OK]
Common Mistakes:
  • Thinking round-robin sends all requests to one server
  • Confusing round-robin with random or load-based methods
  • Assuming round-robin skips servers
2. Which of the following is the correct syntax to define a round-robin upstream block in nginx?
easy
A. upstream backend { round_robin; server server1; server server2; }
B. upstream backend { server server1.example.com; server server2.example.com; }
C. upstream backend { server server1; server server2; load_balance round_robin; }
D. upstream backend { server server1; server server2; balance round_robin; }

Solution

  1. Step 1: Recall nginx upstream syntax

    The default round-robin method requires only listing servers inside an upstream block without extra keywords.
  2. Step 2: Check each option for correctness

    upstream backend { server server1.example.com; server server2.example.com; } correctly lists servers simply. Options B, C, and D use invalid or unsupported directives.
  3. Final Answer:

    upstream backend { server server1.example.com; server server2.example.com; } -> Option B
  4. Quick Check:

    Default round-robin needs only server list [OK]
Hint: Round-robin needs only server list, no extra keywords [OK]
Common Mistakes:
  • Adding unsupported directives like round_robin or balance
  • Using incorrect keywords inside upstream block
  • Forgetting semicolons after server lines
3. Given this nginx upstream configuration:
upstream backend {
  server server1.example.com;
  server server2.example.com;
  server server3.example.com;
}

What server will handle the 5th incoming request?
medium
A. server2.example.com
B. server1.example.com
C. server3.example.com
D. Depends on server load

Solution

  1. Step 1: Understand round-robin cycling through servers

    Requests are sent in order: 1->server1, 2->server2, 3->server3, then cycle repeats.
  2. Step 2: Calculate 5th request server

    Requests 4 and 5 cycle back: 4->server1, 5->server2.
  3. Final Answer:

    server2.example.com -> Option A
  4. Quick Check:

    5 mod 3 = 2, so server2 handles 5th request [OK]
Hint: Count requests modulo server count to find server [OK]
Common Mistakes:
  • Assuming 5th request goes to server3
  • Thinking load affects round-robin by default
  • Starting count from zero instead of one
4. You configured nginx upstream with:
upstream backend {
  server server1.example.com;
  server server2.example.com;
  server server3.example.com down;
}

But requests are still sent to server3.example.com. What is the likely problem?
medium
A. The 'down' parameter is misspelled or misplaced.
B. Nginx does not support marking servers as down.
C. The 'down' parameter requires a reload, not just restart.
D. The 'down' parameter disables the server only if it is unreachable.

Solution

  1. Step 1: Check correct usage of 'down' parameter

    The 'down' flag must be placed immediately after the server address without extra spaces or errors.
  2. Step 2: Identify common syntax mistakes

    If 'down' is misspelled or misplaced, nginx ignores it and still sends requests to that server.
  3. Step 3: Understand reload vs restart

    Nginx requires a reload (nginx -s reload) to apply config changes like 'down'; a restart may not apply changes immediately.
  4. Final Answer:

    The 'down' parameter requires a reload, not just restart. -> Option C
  5. Quick Check:

    Reload nginx to apply 'down' flag changes [OK]
Hint: Reload nginx after config changes to apply 'down' flag [OK]
Common Mistakes:
  • Misspelling 'down' as 'dwon' or 'dnw'
  • Placing 'down' on a separate line
  • Not reloading nginx after config change
5. You want to ensure nginx sends requests evenly to three servers but skip one server temporarily without removing it from config. Which is the best way to do this using round-robin?
hard
A. Mark the server as 'down' in the upstream block to skip it.
B. Remove the server line from the upstream block temporarily.
C. Add 'weight=0' to the server to disable it.
D. Use 'max_fails=0' to prevent requests to that server.

Solution

  1. Step 1: Understand how to skip a server temporarily

    Marking a server as 'down' tells nginx to skip it without removing it from config.
  2. Step 2: Evaluate other options

    Removing the server line is permanent. 'weight=0' is invalid syntax. 'max_fails=0' disables failure detection but not requests.
  3. Final Answer:

    Mark the server as 'down' in the upstream block to skip it. -> Option A
  4. Quick Check:

    'down' flag skips server temporarily [OK]
Hint: Use 'down' flag to skip server without removing it [OK]
Common Mistakes:
  • Removing server line instead of marking down
  • Using invalid 'weight=0' syntax
  • Confusing max_fails with disabling server
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