Rewrite flags (last, break, redirect, permanent) in Nginx - Time & Space Complexity
When nginx processes rewrite rules, it uses flags to decide what to do next. Understanding how these flags affect processing helps us see how the work grows as more rules or requests come in.
We want to know how the number of rewrite rules and their flags impact the total steps nginx takes to handle a request.
Analyze the time complexity of this nginx rewrite snippet with different flags.
location /example/ {
rewrite ^/example/(.*)$ /newpath/$1 last;
rewrite ^/old/(.*)$ /oldpath/$1 break;
rewrite ^/temp/(.*)$ /tempredirect/$1 redirect;
rewrite ^/perm/(.*)$ /permanent/$1 permanent;
}
This snippet shows four rewrite rules with different flags controlling how nginx continues processing after each rewrite.
Look at what repeats when nginx processes these rules.
- Primary operation: nginx checks each rewrite rule in order for a match.
- How many times: It can check multiple rules per request, but flags like
lastandbreakcan stop or restart the checks early.
As the number of rewrite rules grows, nginx may check more rules per request.
| Input Size (rules) | Approx. Operations (rule checks) |
|---|---|
| 10 | Up to 10 checks, but often fewer due to flags |
| 100 | Up to 100 checks, but flags can reduce this |
| 1000 | Up to 1000 checks, flags still help limit checks |
Pattern observation: More rules mean more checks, but flags like last and break help stop or restart processing early, preventing all rules from always running.
Time Complexity: O(n)
This means nginx may check each rewrite rule once per request, but flags can reduce how many it actually checks.
[X] Wrong: "All rewrite rules always run for every request regardless of flags."
[OK] Correct: Flags like last and break stop or restart processing early, so nginx often skips checking all rules.
Understanding how nginx processes rewrite rules and flags shows you can reason about request handling efficiency. This skill helps you explain how servers manage work as configurations grow.
What if we replaced all last flags with break? How would the time complexity change?
Practice
last flag do in an nginx rewrite directive?Solution
Step 1: Understand the
Thelastflag behaviorlastflag tells nginx to stop processing current rewrite directives and restart the rewrite phase with the new URI.Step 2: Compare with other flags
Unlikebreakwhich stops rewriting internally,lastrestarts processing, and unlikeredirectorpermanentwhich send redirects, it does not send a client redirect.Final Answer:
Stops processing the current location and restarts the rewrite phase with the new URI -> Option AQuick Check:
last= restart rewrite phase [OK]
- Confusing last with break flag
- Thinking last sends a redirect
- Mixing last with permanent redirect
Solution
Step 1: Identify the flag for permanent redirect
Thepermanentflag sends an HTTP 301 status code indicating a permanent redirect.Step 2: Check syntax correctness
The syntaxrewrite ^/old$ /new permanent;correctly applies the permanent redirect flag.Final Answer:
rewrite ^/old$ /new permanent; -> Option CQuick Check:
Permanent redirect usespermanentflag [OK]
- Using 'last' or 'break' instead of 'permanent' for redirects
- Omitting the semicolon at the end
- Confusing 'redirect' with 'permanent'
location /test {
rewrite ^/test/(.*)$ /new/$1 redirect;
}What will happen when a client requests
/test/page?Solution
Step 1: Understand the
Theredirectflagredirectflag sends an HTTP 302 temporary redirect to the client.Step 2: Analyze the rewrite rule
The rewrite matches/test/pageand rewrites it to/new/pagewith a temporary redirect.Final Answer:
The client will receive a 302 temporary redirect to /new/page -> Option DQuick Check:
redirect= 302 temporary redirect [OK]
- Confusing redirect with permanent
- Thinking redirect rewrites internally
- Assuming last or break flags here
rewrite ^/oldpath/(.*)$ /newpath/$1 last
But it causes a 500 Internal Server Error. What is the likely problem?
Solution
Step 1: Check syntax of rewrite directive
Every nginx directive must end with a semicolon. The given rewrite lacks a semicolon.Step 2: Understand error cause
Missing semicolon causes nginx to fail parsing config, leading to 500 error.Final Answer:
Missing semicolon at the end of the rewrite directive -> Option AQuick Check:
Missing semicolon = syntax error = 500 error [OK]
- Assuming last flag causes infinite loop
- Ignoring missing semicolon syntax errors
- Thinking regex pattern is wrong without checking
/app to /app/index.html internally without redirecting the client, and stop further rewrite processing. Which rewrite directive and flag should you use?Solution
Step 1: Identify internal rewrite without client redirect
Thebreakflag stops rewrite processing and serves the rewritten URI internally without redirecting the client.Step 2: Match requirement to flag
Usingbreakwith the rewrite stops further rewrites and serves/app/index.htmlinternally.Final Answer:
rewrite ^/app$ /app/index.html break; -> Option BQuick Check:
break= internal rewrite stop [OK]
- Using last which restarts rewrite phase
- Using redirect or permanent which send client redirects
- Not stopping rewrite processing causing unexpected behavior
Ready to prove it?
Pass the test and this pattern moves unknown
