📖 Scenario: You are managing a website using nginx web server. You want to redirect users to different pages based on the URL they request.This is common when you want to send visitors from old URLs to new ones or handle special cases.
🎯 Goal: Build an nginx configuration that uses if statements to redirect requests conditionally.You will create a basic server block, add conditions to check the requested URI, and redirect accordingly.
📋 What You'll Learn
Create a server block listening on port 80
Use if statements to check the $request_uri
Redirect /old-page to /new-page
Redirect /special to /special-offer
Use return 301 for permanent redirects
💡 Why This Matters
🌍 Real World
Websites often change URLs or have special pages. Conditional redirects in nginx help send visitors to the right place without broken links.
💼 Career
Knowing how to configure nginx with conditional redirects is a key skill for DevOps engineers and system administrators managing web servers.
Progress0 / 4 steps
1
Create the basic server block
Create a server block that listens on port 80 and has a server_name of example.com. Inside it, add a location / block with a simple root /var/www/html; directive.
Nginx
Hint
Start with server { and add listen 80; and server_name example.com;. Then add location / { root /var/www/html; }.
2
Add first conditional redirect for /old-page
Inside the location / block, add an if statement that checks if $request_uri equals /old-page. If true, use return 301 /new-page; to redirect.
Nginx
Hint
Use if ($request_uri = "/old-page") { return 301 /new-page; } inside the location / block.
3
Add second conditional redirect for /special
Add another if statement inside the location / block that checks if $request_uri equals /special. If true, use return 301 /special-offer; to redirect.
Nginx
Hint
Add a second if block similar to the first, but checking for /special and redirecting to /special-offer.
4
Test and output the final nginx configuration
Print the entire nginx configuration to verify your conditional redirects are set correctly.
Nginx
Hint
Simply output the full nginx configuration you wrote to check it.
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
Step 1: Understand the role of if in nginx
The if directive evaluates a condition inside the server or location block.
Step 2: Recognize its use for redirects
If the condition is true, nginx can perform actions like return to redirect users.
Final Answer:
It checks a condition and performs an action like redirect if true. -> Option B
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
Step 1: Check correct if syntax in nginx
nginx requires parentheses around the condition and uses a single equals sign for string comparison.
Step 2: Confirm the block and return statement
The condition must be inside parentheses, followed by braces with the return directive inside.
Final Answer:
if ($request_uri = "/old") { return 301 /new; } -> Option C
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
Step 1: Understand the if condition with regex
The condition checks if the user agent contains "Mobile" ignoring case.
Step 2: Apply the redirect action
Since "Mozilla Mobile" matches, nginx returns a 302 redirect to /mobile.
Final Answer:
They are redirected to /mobile with a 302 status. -> Option A
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
Step 1: Check if syntax requirements
nginx requires the condition inside parentheses after if.
Step 2: Verify the given snippet
The snippet lacks parentheses around $request_uri = "/old", causing syntax error.
Final Answer:
Missing parentheses around the condition in if. -> Option A
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
Step 1: Understand nginx if limitations
nginx does not support combining conditions with && inside a single if.
Step 2: Use nested if for multiple conditions
Nested if blocks allow checking one condition inside another.
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.
Final Answer:
if ($request_uri = "/old") { if ($http_referer ~* "example.com") { return 301 /new; } } -> Option D
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 unknownstrongwhile earning +1 Grip toward your certificate.