Bird
Raised Fist0
Nginxdevops~20 mins

Conditional redirects with if in Nginx - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Conditional Redirect Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
💻 Command Output
intermediate
2:00remaining
What is the result of this nginx config snippet?
Given this nginx server block snippet, what will happen when a user visits http://example.com/oldpage?
Nginx
server {
    listen 80;
    server_name example.com;

    location / {
        if ($request_uri = "/oldpage") {
            return 301 /newpage;
        }
        root /var/www/html;
    }
}
AThe server returns a 500 Internal Server Error
BThe user sees the content of /oldpage from the root directory
CThe server returns a 404 Not Found error
DThe user is redirected permanently to http://example.com/newpage
Attempts:
2 left
💡 Hint
Think about what the 'if' directive does with the 'return 301' inside the location block.
❓ Troubleshoot
intermediate
2:00remaining
Why does this nginx config cause a redirect loop?
Consider this nginx config snippet:
location / {
    if ($request_uri ~* "/oldpage") {
        return 301 /oldpage;
    }
}
Why does this cause a redirect loop when visiting /oldpage?
ABecause the location block is missing a root directive
BBecause the return directive is missing a status code
CBecause the redirect points to the same URI, causing infinite redirects
DBecause the regex in the if condition is invalid syntax
Attempts:
2 left
💡 Hint
Check what the redirect target is compared to the requested URI.
❓ Configuration
advanced
2:00remaining
Which config correctly redirects only POST requests to /submit to /process?
You want to redirect only POST requests to /submit to /process permanently. Which nginx config snippet achieves this?
A
if ($request_method = POST) {
    if ($request_uri = "/submit") {
        return 301 /process;
    }
}
B
location = /submit {
    if ($request_method = POST) {
        return 301 /process;
    }
}
C
if ($request_method = POST) {
    return 301 /process;
}
D
location /submit {
    if ($request_method = POST) {
        return 301 /process;
    }
}
Attempts:
2 left
💡 Hint
Use a location block that matches exactly /submit and then check the method inside.
🧠 Conceptual
advanced
2:00remaining
What is a limitation of using 'if' for redirects in nginx?
Which statement best describes a limitation of using the if directive inside nginx location blocks for conditional redirects?
AThe 'if' directive can cause unexpected behavior and is not recommended for complex logic
BThe 'if' directive cannot access variables like $request_uri
CThe 'if' directive always causes nginx to reload the configuration
DThe 'if' directive only works with GET requests
Attempts:
2 left
💡 Hint
Think about nginx official recommendations regarding 'if' usage.
🔀 Workflow
expert
3:00remaining
Order the steps to safely implement a conditional redirect in nginx
Put these steps in the correct order to safely add a conditional redirect using 'if' in nginx configuration.
A4,2,1,3
B2,4,1,3
C1,4,2,3
D4,1,2,3
Attempts:
2 left
💡 Hint
Always backup before making changes, then test syntax before reload.

Practice

(1/5)
1. What does the if directive do in an nginx configuration for conditional redirects?
easy
A. It logs all user requests to a file.
B. It checks a condition and performs an action like redirect if true.
C. It restarts nginx automatically.
D. It permanently disables the server.

Solution

  1. Step 1: Understand the role of if in nginx

    The if directive evaluates a condition inside the server or location block.
  2. Step 2: Recognize its use for redirects

    If the condition is true, nginx can perform actions like return to redirect users.
  3. Final Answer:

    It checks a condition and performs an action like redirect if true. -> Option B
  4. Quick Check:

    if checks condition for redirect [OK]
Hint: Remember: if tests, return redirects [OK]
Common Mistakes:
  • Thinking if restarts nginx
  • Confusing if with logging
  • Assuming if disables server
2. Which of the following is the correct syntax to redirect all requests from /old to /new using if in nginx?
easy
A. if ($request_uri == "/old") return 301 /new;
B. if $request_uri == "/old" { return 301 /new; }
C. if ($request_uri = "/old") { return 301 /new; }
D. if $request_uri = "/old" return 301 /new;

Solution

  1. Step 1: Check correct if syntax in nginx

    nginx requires parentheses around the condition and uses a single equals sign for string comparison.
  2. Step 2: Confirm the block and return statement

    The condition must be inside parentheses, followed by braces with the return directive inside.
  3. Final Answer:

    if ($request_uri = "/old") { return 301 /new; } -> Option C
  4. Quick Check:

    Parentheses and braces with single = [OK]
Hint: Use parentheses and single = inside if [OK]
Common Mistakes:
  • Using double == instead of single =
  • Omitting parentheses around condition
  • Missing braces around return
3. Given this nginx snippet:
server {
  listen 80;
  server_name example.com;
  location / {
    if ($http_user_agent ~* "Mobile") {
      return 302 /mobile;
    }
  }
}

What happens when a user with user agent "Mozilla Mobile" visits http://example.com/?
medium
A. They are redirected to /mobile with a 302 status.
B. They see the normal homepage without redirect.
C. They get a 404 error.
D. The server crashes due to syntax error.

Solution

  1. Step 1: Understand the if condition with regex

    The condition checks if the user agent contains "Mobile" ignoring case.
  2. Step 2: Apply the redirect action

    Since "Mozilla Mobile" matches, nginx returns a 302 redirect to /mobile.
  3. Final Answer:

    They are redirected to /mobile with a 302 status. -> Option A
  4. Quick Check:

    User agent matches regex, triggers redirect [OK]
Hint: Regex ~* means case-insensitive match [OK]
Common Mistakes:
  • Ignoring case sensitivity in regex
  • Assuming no redirect happens
  • Thinking syntax error occurs
4. Identify the error in this nginx config snippet for redirecting /old to /new:
if $request_uri = "/old" {
  return 301 /new;
}
medium
A. Missing parentheses around the condition in if.
B. Using double equals instead of single equals.
C. Missing semicolon after if statement.
D. Incorrect return status code.

Solution

  1. Step 1: Check if syntax requirements

    nginx requires the condition inside parentheses after if.
  2. Step 2: Verify the given snippet

    The snippet lacks parentheses around $request_uri = "/old", causing syntax error.
  3. Final Answer:

    Missing parentheses around the condition in if. -> Option A
  4. Quick Check:

    if needs parentheses [OK]
Hint: Always wrap if conditions in parentheses [OK]
Common Mistakes:
  • Forgetting parentheses in if
  • Confusing single and double equals
  • Thinking semicolon needed after if
5. You want to redirect users accessing /old only if they come from the domain example.com. Which nginx config snippet correctly does this using if?
hard
A. if ($request_uri = "/old" && $http_referer ~* "example.com") { return 301 /new; }
B. if ($request_uri = "/old") { return 301 /new if ($http_referer ~* "example.com"); }
C. if ($request_uri = "/old" || $http_referer ~* "example.com") { return 301 /new; }
D. if ($request_uri = "/old") { if ($http_referer ~* "example.com") { return 301 /new; } }

Solution

  1. Step 1: Understand nginx if limitations

    nginx does not support combining conditions with && inside a single if.
  2. Step 2: Use nested if for multiple conditions

    Nested if blocks allow checking one condition inside another.
  3. Step 3: Analyze options

    if ($request_uri = "/old") { if ($http_referer ~* "example.com") { return 301 /new; } } uses nested if correctly; others use unsupported syntax or wrong logic.
  4. Final Answer:

    if ($request_uri = "/old") { if ($http_referer ~* "example.com") { return 301 /new; } } -> Option D
  5. Quick Check:

    Nested if for multiple conditions [OK]
Hint: Use nested if for multiple conditions in nginx [OK]
Common Mistakes:
  • Trying to use && inside one if
  • Using || instead of && for AND logic
  • Placing return incorrectly
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