Bird
Raised Fist0
Nginxdevops~5 mins

Conditional redirects with if in Nginx - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What does the if directive do in an nginx configuration?
The if directive checks a condition and executes the code inside its block only if the condition is true. It is often used for conditional redirects or rewrites.
Click to reveal answer
beginner
How do you write a conditional redirect in nginx to send users from http://example.com to https://example.com?
Use the if directive to check if the request is not HTTPS, then use return 301 https://$host$request_uri; to redirect permanently.
Click to reveal answer
intermediate
Why should you avoid complex logic inside nginx if blocks?
Because nginx if is not a full programming language and can cause unexpected behavior or performance issues if used improperly. It's best for simple conditions like redirects.
Click to reveal answer
intermediate
What is the syntax to redirect users to a maintenance page only if the URI contains /old-page?
Use if ($request_uri ~ /old-page) { return 302 /maintenance.html; } inside the server block.
Click to reveal answer
beginner
What HTTP status code is commonly used for permanent redirects in nginx conditional redirects?
The status code 301 is used for permanent redirects, telling browsers and search engines the resource has moved permanently.
Click to reveal answer
Which nginx directive is used to perform conditional redirects?
Alocation
Bmap
Cif
Dproxy_pass
What does this nginx code do?
if ($scheme = http) { return 301 https://$host$request_uri; }
ARedirects HTTP requests to HTTPS
BRedirects HTTPS requests to HTTP
CBlocks HTTP requests
DDoes nothing
Which status code is used for a permanent redirect in nginx?
A200
B404
C500
D301
What is a risk of using complex logic inside nginx if blocks?
AIt can cause unexpected behavior or performance issues
BIt can cause nginx to crash
CIt will always work perfectly
DIt disables logging
How do you redirect requests for /old-page to /maintenance.html using nginx if?
Aif ($request_uri = /old-page) { return 302 /maintenance.html; }
Bif ($request_uri ~ /old-page) { return 302 /maintenance.html; }
Clocation /old-page { return 404; }
Dproxy_pass /maintenance.html;
Explain how to use the nginx if directive to create a conditional redirect from HTTP to HTTPS.
Think about checking the protocol and redirecting to the secure version.
You got /3 concepts.
    Describe best practices and limitations when using if for conditional redirects in nginx.
    Consider performance and reliability when using <code>if</code>.
    You got /4 concepts.

      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