Bird
Raised Fist0
Nginxdevops~20 mins

Nested location blocks in Nginx - Practice Problems & Coding Challenges

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
Challenge - 5 Problems
🎖️
Nested Location Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
💻 Command Output
intermediate
2:00remaining
Output of nested location block matching
Given the following nginx configuration, what will be the response for a request to /app/api/data?
Nginx
server {
    listen 80;
    location /app/ {
        return 200 'App root';
    }
    location /app/api/ {
        return 200 'API root';
    }
}
AApp root
B404 Not Found
C500 Internal Server Error
DAPI root
Attempts:
2 left
💡 Hint
Nested location blocks are not supported in nginx configuration.
🧠 Conceptual
intermediate
1:30remaining
Understanding nested location block behavior
Why does nginx ignore nested location blocks inside another location block?
ABecause nginx parses location blocks only at the server level, not inside other locations
BBecause nested location blocks cause a syntax error and nginx refuses to start
CBecause nested location blocks are merged into one by nginx automatically
DBecause nested location blocks are only allowed inside <code>if</code> blocks
Attempts:
2 left
💡 Hint
Think about how nginx configuration is structured and parsed.
Troubleshoot
advanced
2:00remaining
Troubleshooting nested location block error
You added a nested location block inside another location in your nginx config. nginx fails to start with an error. What is the most likely cause?
AThe nested location block is missing a semicolon at the end
Bnginx does not allow nested <code>location</code> blocks, causing a configuration error
CThe nested location block uses an invalid URI pattern
DThe nested location block conflicts with a server block
Attempts:
2 left
💡 Hint
Check nginx documentation about location block placement.
🔀 Workflow
advanced
2:30remaining
Correct way to handle nested URL paths in nginx
You want to serve different content for /app/ and /app/api/ URLs. Since nested location blocks are not allowed, how should you configure nginx?
AUse <code>if</code> statements inside <code>location /app/</code> to check for /api/
BUse nested <code>location</code> blocks inside <code>location /app/</code> block
CDefine separate <code>location /app/</code> and <code>location /app/api/</code> blocks at the server level
DUse rewrite rules inside <code>location /app/</code> to redirect /api/ requests
Attempts:
2 left
💡 Hint
Think about how nginx matches locations and the configuration structure.
Best Practice
expert
3:00remaining
Best practice for organizing complex URL routing in nginx
For a large application with many nested URL paths, what is the best practice to organize nginx location blocks?
ADefine all <code>location</code> blocks separately at the server level with clear, specific prefixes
BUse a single <code>location /</code> block with complex regex to handle all paths
CUse nested <code>location</code> blocks to group related paths together
DUse nested <code>if</code> statements inside one <code>location</code> block to route requests
Attempts:
2 left
💡 Hint
Consider nginx's configuration parsing and matching rules.

Practice

(1/5)
1. What is the main purpose of using nested location blocks in an nginx configuration?
easy
A. To automatically update nginx software
B. To increase server hardware performance
C. To organize URL handling inside parent paths for clearer rules
D. To disable logging for specific URLs

Solution

  1. Step 1: Understand the role of location blocks

    Location blocks define how nginx handles requests for specific URL paths.
  2. Step 2: Recognize the benefit of nesting

    Nested location blocks allow specific rules for sub-paths without repeating the parent path, making configuration clearer.
  3. Final Answer:

    To organize URL handling inside parent paths for clearer rules -> Option C
  4. Quick Check:

    Nested location blocks = organize URL handling [OK]
Hint: Nested blocks group URL rules under parent paths [OK]
Common Mistakes:
  • Thinking nested blocks improve hardware speed
  • Confusing nested blocks with software updates
  • Assuming nested blocks disable logging
2. Which of the following is the correct syntax to define a nested location block inside location /app/ in nginx?
easy
A. location /app/ { location api/ { proxy_pass http://backend; } }
B. location /app/ { location /appapi/ { proxy_pass http://backend; } }
C. location /app/ { location /app/api/ { proxy_pass http://backend; } }
D. location /app/ { location /api/ { proxy_pass http://backend; } }

Solution

  1. Step 1: Check nested location path relative to parent

    Nested location inside location /app/ should define sub-paths relative to /app/, so api/ without leading slash is correct.
  2. Step 2: Validate syntax correctness

    location /app/ { location api/ { proxy_pass http://backend; } } uses location api/ inside location /app/, which is valid and clear.
  3. Final Answer:

    location /app/ { location api/ { proxy_pass http://backend; } } -> Option A
  4. Quick Check:

    Nested path is relative and omits leading slash [OK]
Hint: Nested location paths omit parent prefix and leading slash inside block [OK]
Common Mistakes:
  • Repeating full parent path in nested location
  • Missing leading slash in nested path
  • Combining parent and child paths incorrectly
3. Given this nginx config snippet:
location /shop/ {
  root /var/www/html;
  location /cart/ {
    proxy_pass http://cart_backend;
  }
}
What happens when a user requests /shop/cart/view?
medium
A. Request serves static file /var/www/html/shop/cart/view
B. Request is proxied to http://cart_backend/view
C. Request returns 404 Not Found
D. Request is proxied to http://cart_backend/shop/cart/view

Solution

  1. Step 1: Identify matching location block

    Request /shop/cart/view matches nested location /cart/ inside location /shop/.
  2. Step 2: Understand proxy_pass behavior

    Proxy_pass inside nested block forwards request path after /cart/, so /view is sent to http://cart_backend.
  3. Final Answer:

    Request is proxied to http://cart_backend/view -> Option B
  4. Quick Check:

    Nested proxy_pass strips matched prefix [OK]
Hint: Nested proxy_pass forwards sub-path after nested location [OK]
Common Mistakes:
  • Assuming static file serving instead of proxy
  • Including full original path in proxy_pass
  • Expecting 404 due to nested block
4. Identify the error in this nginx config snippet:
location /api/ {
  location /v1/ {
    proxy_pass http://api_v1_backend;
  }
  location /v2/ {
    proxy_pass http://api_v2_backend;
  }
}
medium
A. Nested location blocks cannot be used inside another location
B. No error; configuration is valid
C. proxy_pass URLs must include trailing slash
D. Nested location paths should not start with a slash

Solution

  1. Step 1: Recall nested location path syntax

    Nested location paths inside a parent location should be relative and not start with a slash.
  2. Step 2: Check given nested paths

    Nested locations use /v1/ and /v2/ starting with slash, which is incorrect.
  3. Final Answer:

    Nested location paths should not start with a slash -> Option D
  4. Quick Check:

    Nested paths omit leading slash [OK]
Hint: Nested location paths omit leading slash [OK]
Common Mistakes:
  • Thinking nested locations are disallowed
  • Believing proxy_pass must have trailing slash
  • Assuming config is valid as is
5. You want to serve static files from /var/www/app for /app/ URLs, but proxy API requests under /app/api/ to http://api_backend. Which nested location block setup is correct?
hard
A. location /app/ { root /var/www/app; location api/ { proxy_pass http://api_backend; } }
B. location /app/ { root /var/www/app; location /api/ { proxy_pass http://api_backend; } }
C. location /app/ { root /var/www/app; location /app/api/ { proxy_pass http://api_backend; } }
D. location /app/ { root /var/www/app; location /appapi/ { proxy_pass http://api_backend; } }

Solution

  1. Step 1: Set root for /app/ static files

    Use root /var/www/app; inside location /app/ to serve static files.
  2. Step 2: Define nested location for API proxy

    Nested location for /app/api/ should be location api/ without leading slash inside location /app/.
  3. Step 3: Verify proxy_pass target

    Proxy_pass points to http://api_backend correctly.
  4. Final Answer:

    location /app/ { root /var/www/app; location api/ { proxy_pass http://api_backend; } } -> Option A
  5. Quick Check:

    Nested path omits /, root set for static, proxy for api [OK]
Hint: Nested location paths omit leading slash; root applies to parent [OK]
Common Mistakes:
  • Repeating full path in nested location
  • Using leading slash in nested location
  • Misplacing root directive inside nested block