Bird
Raised Fist0
Nginxdevops~10 mins

Location blocks in Nginx - Step-by-Step Execution

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Process Flow - Location blocks
Request comes in
Check location blocks in order
Match exact location?
YesUse exact block
No
Match prefix location?
YesUse longest prefix block
No
Match regex location?
YesUse first regex match
No
Use default location block
Serve request with chosen block
Nginx checks location blocks in a specific order: exact match first, then prefix matches, then regex matches, and finally the default block if no match is found.
Execution Sample
Nginx
location = /exact {
  return 200 'Exact match';
}

location /prefix {
  return 200 'Prefix match';
}

location ~ ^/regex {
  return 200 'Regex match';
}
This config defines three location blocks: exact match for /exact, prefix match for /prefix, and regex match for URLs starting with /regex.
Process Table
StepRequest URLCheckMatch ResultChosen Location BlockAction
1/exactCheck exact match location = /exactMatched/exactReturn 200 'Exact match'
2/prefix/testCheck exact match location = /prefix/testNo matchN/AContinue
3/prefix/testCheck prefix location /prefixMatched (longest prefix)/prefixReturn 200 'Prefix match'
4/regex123Check exact match location = /regex123No matchN/AContinue
5/regex123Check prefix location /regex123No matchN/AContinue
6/regex123Check regex location ~ ^/regexMatched/regexReturn 200 'Regex match'
7/otherCheck exact match location = /otherNo matchN/AContinue
8/otherCheck prefix location /otherNo matchN/AContinue
9/otherCheck regex location ~ ^/regexNo matchN/AContinue
10/otherUse default location blockDefault/Serve default content
💡 Request served by the first matching location block found in the order: exact, prefix, regex, or default.
Status Tracker
VariableStartAfter Step 1After Step 3After Step 6After Step 10
Chosen Location BlockNone/exact/prefix/regex/
Key Moments - 3 Insights
Why does nginx choose the exact match location block before prefix or regex?
Nginx prioritizes exact matches first as shown in execution_table row 1, so if an exact match exists, it uses that block immediately.
What happens if no exact or prefix location matches but a regex matches?
Nginx then uses the first regex location that matches, as seen in execution_table row 6 where regex match is chosen after no exact or prefix match.
Why is there a default location block used at the end?
If no exact, prefix, or regex matches are found, nginx falls back to the default location block to serve the request, as in execution_table row 10.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, which location block is chosen for the URL '/prefix/test'?
A/prefix
B/regex
C/exact
D/
💡 Hint
Check execution_table row 3 where prefix match is found for '/prefix/test'.
At which step does nginx decide to use the regex location block?
AStep 1
BStep 3
CStep 6
DStep 10
💡 Hint
See execution_table row 6 where regex match is confirmed.
If the exact location block for '/exact' was removed, what would happen for the URL '/exact'?
AUse regex location if matches
BUse prefix location if matches
CUse default location block
DReturn 404 error
💡 Hint
Refer to concept_flow and execution_table logic: exact match missing leads to prefix match check.
Concept Snapshot
Nginx Location Blocks:
- Exact match (=) checked first
- Then longest prefix match (/)
- Then regex (~ or ~*) matches
- Finally default location (/)
Request served by first matching block found in this order.
Full Transcript
When nginx receives a request, it looks for a matching location block to decide how to serve it. It first checks if there is an exact match location block for the request URL. If found, it uses that block immediately. If not, it looks for prefix matches and chooses the longest matching prefix. If no prefix matches, it checks regex location blocks in order and uses the first regex that matches. If none of these match, it falls back to the default location block. This order ensures nginx serves requests efficiently and predictably.

Practice

(1/5)
1. What is the main purpose of a location block in an nginx configuration?
easy
A. To specify the server's hostname
B. To set the server's IP address
C. To define how nginx handles requests for specific URL paths
D. To configure the database connection

Solution

  1. Step 1: Understand the role of location blocks

    Location blocks in nginx specify rules for handling requests based on URL paths.
  2. Step 2: Compare options with location block purpose

    Only To define how nginx handles requests for specific URL paths correctly describes this purpose; others relate to different server settings.
  3. Final Answer:

    To define how nginx handles requests for specific URL paths -> Option C
  4. Quick Check:

    Location blocks control URL handling = D [OK]
Hint: Location blocks match URLs to control request handling [OK]
Common Mistakes:
  • Confusing location blocks with server settings
  • Thinking location blocks set server IP or hostname
  • Mixing location blocks with database configs
2. Which of the following is the correct syntax to define a location block that matches the exact URL /about?
easy
A. location /about { }
B. location ~ /about { }
C. location ^~ /about { }
D. location = /about { }

Solution

  1. Step 1: Understand location modifiers

    The = modifier matches the exact URL path.
  2. Step 2: Match syntax to exact URL

    location = /about { } uses = /about which matches exactly '/about'. Others match prefixes or regex.
  3. Final Answer:

    location = /about { } -> Option D
  4. Quick Check:

    Exact match uses '=' modifier = C [OK]
Hint: Use '=' for exact URL match in location block [OK]
Common Mistakes:
  • Using no modifier for exact match
  • Confusing regex (~) with exact match
  • Using ^~ which is prefix, not exact
3. Given this nginx config snippet:
location /images/ {
  root /data;
}

What is the full file path nginx will serve for a request to /images/pic.jpg?
medium
A. /data/pic.jpg
B. /data/images/pic.jpg
C. /images/pic.jpg
D. /data/images/

Solution

  1. Step 1: Understand root directive with location

    The root directive appends the part of the URI after the location prefix to the root path.
  2. Step 2: Combine root and URI

    Location prefix is /images/, request URI is /images/pic.jpg, so the part after prefix is pic.jpg. Root is /data, so full path is /data/pic.jpg.
  3. Final Answer:

    /data/pic.jpg -> Option A
  4. Quick Check:

    root + URI after location prefix = /data/pic.jpg [OK]
Hint: root + URI after location prefix = file path served [OK]
Common Mistakes:
  • Assuming root combines with full URI
  • Using full URI instead of URI after location prefix
  • Confusing alias with root behavior
4. Identify the error in this nginx location block:
location /static/ {
  alias /var/www/static;
}
medium
A. Missing trailing slash in alias path
B. alias should be root here
C. location path should not end with slash
D. No error, configuration is correct

Solution

  1. Step 1: Understand alias usage

    When using alias with a location ending with a slash, the alias path must also end with a slash.
  2. Step 2: Check alias path

    Alias path /var/www/static lacks trailing slash, causing incorrect file path resolution.
  3. Final Answer:

    Missing trailing slash in alias path -> Option A
  4. Quick Check:

    Alias path must end with '/' if location ends with '/' = B [OK]
Hint: Alias path needs trailing slash if location ends with slash [OK]
Common Mistakes:
  • Using root instead of alias incorrectly
  • Omitting trailing slash on alias path
  • Thinking location path cannot end with slash
5. You want nginx to serve static files from /var/www/app/static when users request URLs starting with /static/, but you want to avoid duplicating the /static/ part in the file path. Which location block correctly achieves this?
hard
A. location /static/ { root /var/www/app/static; }
B. location /static/ { alias /var/www/app/static/; }
C. location /static/ { alias /var/www/app/static; }
D. location /static/ { root /var/www/app; }

Solution

  1. Step 1: Understand alias vs root behavior

    Alias replaces the location prefix with the alias path exactly, avoiding duplication.
  2. Step 2: Check trailing slashes for alias

    Alias path must end with a slash to match location ending with slash, ensuring correct path mapping.
  3. Step 3: Evaluate options

    location /static/ { alias /var/www/app/static/; } uses alias with trailing slash, correctly mapping /static/file to /var/www/app/static/file. Others either duplicate path or miss slash.
  4. Final Answer:

    location /static/ { alias /var/www/app/static/; } -> Option B
  5. Quick Check:

    Alias with trailing slash avoids duplication = A [OK]
Hint: Use alias with trailing slash to avoid path duplication [OK]
Common Mistakes:
  • Using root causing duplicated /static/ in path
  • Omitting trailing slash on alias path
  • Confusing alias and root usage