Bird
Raised Fist0
Nginxdevops~5 mins

limit_req_zone and limit_req in Nginx - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the purpose of limit_req_zone in nginx?

limit_req_zone defines a shared memory zone to store request states for limiting request rates from clients. It sets the key to identify clients and the rate limit.

Click to reveal answer
beginner
How does limit_req work in nginx configuration?

limit_req applies the rate limiting defined by limit_req_zone to a specific location or server block, controlling how many requests per second a client can make.

Click to reveal answer
intermediate
What does the burst parameter do in limit_req?

The burst parameter allows a client to exceed the rate limit temporarily by queuing extra requests. This helps smooth traffic spikes without immediate rejection.

Click to reveal answer
beginner
Explain the role of the zone parameter in limit_req.

The zone parameter in limit_req specifies which shared memory zone (defined by limit_req_zone) to use for rate limiting.

Click to reveal answer
intermediate
What happens if a client exceeds the rate limit set by limit_req without a burst?

Requests exceeding the limit are rejected with HTTP status 503 (Service Unavailable) immediately if no burst is configured.

Click to reveal answer
What does limit_req_zone $binary_remote_addr zone=mylimit:10m rate=5r/s; do?
ALimits each client IP to 5 requests per second using a 10MB shared memory zone
BLimits total server requests to 5 per second
CBlocks clients after 5 requests total
DAllows unlimited requests but logs them
Which directive applies the rate limit defined by limit_req_zone?
Alimit_req
Blimit_conn
Climit_rate
Dlimit_zone
What is the effect of setting burst=10 in limit_req?
AIncreases rate limit by 10 requests per second
BBlocks 10 requests immediately
CAllows 10 extra requests to queue temporarily beyond the rate limit
DDisables rate limiting
If no burst is set, what happens when a client exceeds the rate limit?
ARequests are logged but allowed
BRequests are rejected with HTTP 503
CRequests are delayed but accepted
DRequests are queued indefinitely
What key is commonly used in limit_req_zone to identify clients?
A$server_name
B$request_uri
C$host
D$binary_remote_addr
Describe how to configure nginx to limit each client IP to 10 requests per second with a burst of 5.
Think about defining the shared zone first, then applying it with burst.
You got /5 concepts.
    Explain what happens internally when a client sends requests faster than the configured rate limit in nginx using limit_req.
    Consider how nginx tracks and controls request flow per client.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of the limit_req_zone directive in nginx?
      easy
      A. To log requests that exceed the limit
      B. To apply the rate limit rules to a specific location
      C. To define the key and rate limit parameters for request limiting
      D. To restart nginx when limits are reached

      Solution

      1. Step 1: Understand the role of limit_req_zone

        This directive sets the shared memory zone and key used to track requests for limiting.
      2. Step 2: Differentiate from limit_req

        limit_req applies the rules, but limit_req_zone defines them.
      3. Final Answer:

        To define the key and rate limit parameters for request limiting -> Option C
      4. Quick Check:

        limit_req_zone defines limits [OK]
      Hint: Remember: zone defines limits, limit_req applies them [OK]
      Common Mistakes:
      • Confusing limit_req_zone with limit_req
      • Thinking it applies limits directly
      • Assuming it logs requests
      2. Which of the following is the correct syntax to define a rate limit zone named mylimit with 10MB memory and 5 requests per second per IP?
      easy
      A. limit_req_zone $binary_remote_addr zone=mylimit:10m rate=5r/s;
      B. limit_req_zone zone=mylimit:10m $binary_remote_addr rate=5r/s;
      C. limit_req_zone $remote_addr zone=mylimit:5m rate=10r/s;
      D. limit_req_zone $binary_remote_addr zone=mylimit:10m rate=5r/m;

      Solution

      1. Step 1: Check the correct order of parameters

        The syntax is limit_req_zone key zone=name:size rate=rate; so key first, then zone with name and size, then rate.
      2. Step 2: Validate values

        $binary_remote_addr is preferred key, zone name is mylimit, size is 10m, rate is 5r/s (requests per second).
      3. Final Answer:

        limit_req_zone $binary_remote_addr zone=mylimit:10m rate=5r/s; -> Option A
      4. Quick Check:

        Correct syntax = limit_req_zone $binary_remote_addr zone=mylimit:10m rate=5r/s; [OK]
      Hint: Syntax: key zone=name:size rate=numberr/s [OK]
      Common Mistakes:
      • Swapping zone and key order
      • Using wrong memory size units
      • Confusing rate units (r/s vs r/m)
      3. Given this nginx config snippet:
      limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
      server {
        location /api/ {
          limit_req zone=one burst=2;
        }
      }

      What happens if a client sends 4 requests instantly to /api/?
      medium
      A. All 4 requests are processed immediately
      B. 1 request processed immediately, 2 delayed, 1 rejected
      C. 1 request processed immediately, 3 rejected
      D. All 4 requests rejected

      Solution

      1. Step 1: Understand rate and burst

        Rate is 1 request per second, burst=2 allows 2 extra requests to queue.
      2. Step 2: Analyze 4 instant requests

        First request passes immediately, next 2 are delayed (burst), 4th exceeds burst and is rejected.
      3. Final Answer:

        1 request processed immediately, 2 delayed, 1 rejected -> Option B
      4. Quick Check:

        burst=2 allows 2 queued requests [OK]
      Hint: burst allows extra queued requests before rejection [OK]
      Common Mistakes:
      • Assuming all requests pass immediately
      • Ignoring burst parameter
      • Thinking burst rejects requests
      4. You configured:
      limit_req_zone $binary_remote_addr zone=rlimit:10m rate=10r/s;
      server {
        location / {
          limit_req zone=rlimit burst=5;
        }
      }

      But nginx logs show no rate limiting is applied. What is the likely error?
      medium
      A. Incorrect key used in limit_req_zone
      B. The limit_req_zone directive must be inside server block
      C. No nodelay option causing silent ignoring
      D. Missing limit_req directive inside server block

      Solution

      1. Step 1: Check key correctness

        Using an incorrect key in limit_req_zone (e.g., $remote_addr instead of the preferred $binary_remote_addr) prevents proper rate limiting from being applied.
      2. Step 2: Confirm directive placement

        limit_req_zone must be in http context, limit_req in server/location; placement here is correct.
      3. Final Answer:

        Missing limit_req directive inside server block -> Option D
      4. Quick Check:

        limit_req directive is required to apply limits [OK]
      Hint: Check that limit_req directive is present inside server/location block [OK]
      Common Mistakes:
      • Placing limit_req_zone inside server block
      • Assuming nodelay is required
      • Not matching key with client IP
      5. You want to limit requests to 10 per second per user IP but allow bursts of up to 20 requests without delay. Which configuration correctly achieves this?
      hard
      A. limit_req_zone $binary_remote_addr zone=fastlimit:10m rate=10r/s; limit_req zone=fastlimit burst=20 nodelay;
      B. limit_req_zone $remote_addr zone=fastlimit:10m rate=20r/s; limit_req zone=fastlimit burst=10;
      C. limit_req_zone $binary_remote_addr zone=fastlimit:10m rate=10r/s; limit_req zone=fastlimit burst=20;
      D. limit_req_zone $remote_addr zone=fastlimit:20m rate=10r/s; limit_req zone=fastlimit burst=10 nodelay;

      Solution

      1. Step 1: Define correct rate and burst

        Rate is 10r/s, burst 20 means allow 20 extra requests queued without delay.
      2. Step 2: Use nodelay to avoid delaying burst requests

        nodelay makes burst requests processed immediately, matching requirement.
      3. Step 3: Validate key and zone size

        $binary_remote_addr is preferred key, 10m memory is sufficient.
      4. Final Answer:

        limit_req_zone $binary_remote_addr zone=fastlimit:10m rate=10r/s; limit_req zone=fastlimit burst=20 nodelay; -> Option A
      5. Quick Check:

        burst=20 with nodelay = immediate burst allowed [OK]
      Hint: Use burst with nodelay for instant burst requests [OK]
      Common Mistakes:
      • Swapping burst and rate values
      • Omitting nodelay causing delays
      • Using wrong key variable
      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