Bird
Raised Fist0
Nginxdevops~20 mins

Expires directive 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
🎖️
Expires Directive Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
💻 Command Output
intermediate
2:00remaining
What is the effect of this Expires directive in nginx?
Given the nginx configuration snippet:
location /images/ {
  expires 30d;
}

What will be the Cache-Control header value sent to clients for files under /images/?
Nginx
location /images/ {
  expires 30d;
}
ACache-Control: max-age=3600
BCache-Control: max-age=2592000
CCache-Control: no-cache
DCache-Control: no-store
Attempts:
2 left
💡 Hint
30d means 30 days in seconds for max-age.
🧠 Conceptual
intermediate
1:30remaining
How does the 'expires' directive affect browser caching?
Which statement best describes the role of the 'expires' directive in nginx?
AIt sets how long browsers should cache the resource before requesting it again.
BIt disables caching completely for the resource.
CIt forces the browser to always revalidate the resource with the server.
DIt compresses the resource before sending it to the client.
Attempts:
2 left
💡 Hint
Think about cache duration.
Configuration
advanced
2:00remaining
Which nginx configuration sets no caching for CSS files?
You want to configure nginx to prevent caching of CSS files. Which configuration snippet achieves this?
A
location ~* \.css$ {
  expires 1h;
}
B
location ~* \.css$ {
  expires max;
}
C
location ~* \.css$ {
  expires off;
}
D
location ~* \.css$ {
  expires 30d;
}
Attempts:
2 left
💡 Hint
'expires off;' disables caching.
Troubleshoot
advanced
2:00remaining
Why is the Expires header not set as expected?
You configured nginx with:
location /static/ {
  expires 7d;
}

But clients do not receive the Expires header. What is a likely cause?
AThe 'expires' directive is inside a location block that is never matched.
BThe 'expires' directive requires a reload of the server to take effect.
CThe 'expires' directive only works for dynamic content, not static files.
DThe 'expires' directive conflicts with gzip compression.
Attempts:
2 left
💡 Hint
Check if the location block matches the request path.
Best Practice
expert
2:30remaining
What is the recommended way to set long cache expiration for versioned static assets?
You have static assets with filenames including version hashes (e.g., app.abc123.js). What is the best practice for setting the 'expires' directive in nginx?
ADo not set 'expires' and rely on browser defaults.
BSet 'expires off;' to disable caching to avoid stale files.
CSet 'expires 1h;' to cache for a short time and reduce stale content risk.
DSet 'expires max;' to cache assets indefinitely since filenames change on updates.
Attempts:
2 left
💡 Hint
Versioned filenames allow safe long caching.

Practice

(1/5)
1. What is the main purpose of the expires directive in an nginx configuration?
easy
A. To specify the file upload size limit
B. To control how long browsers cache files before requesting them again
C. To limit the number of simultaneous connections
D. To set the server's time zone

Solution

  1. Step 1: Understand the role of expires in nginx

    The expires directive tells browsers how long to keep files cached before checking for updates.
  2. Step 2: Compare options with this function

    Only To control how long browsers cache files before requesting them again matches this purpose; others relate to different server settings.
  3. Final Answer:

    To control how long browsers cache files before requesting them again -> Option B
  4. Quick Check:

    Expires directive = browser cache time [OK]
Hint: Expires controls browser cache duration for files [OK]
Common Mistakes:
  • Confusing expires with server timezone settings
  • Thinking expires limits connections
  • Mixing expires with upload size limits
2. Which of the following is the correct syntax to set the expires directive to 1 day in nginx?
easy
A. expires = 1 day;
B. expires 1 day
C. expires 24hours;
D. expires 1d;

Solution

  1. Step 1: Recall nginx expires syntax

    The correct syntax uses a time value followed by a semicolon, e.g., expires 1d; for one day.
  2. Step 2: Check each option for syntax correctness

    expires = 1 day; uses invalid '=' and full word 'day'; expires 1 day lacks semicolon; expires 24hours; uses invalid time unit '24hours'. Only B matches correct syntax: expires 1d;.
  3. Final Answer:

    expires 1d; -> Option D
  4. Quick Check:

    Correct syntax ends with semicolon and uses short time unit [OK]
Hint: Use short time units with semicolon, like 'expires 1d;' [OK]
Common Mistakes:
  • Omitting semicolon at the end
  • Using spaces in time value
  • Writing full words like 'day' instead of 'd'
3. Given this nginx config snippet:
location ~* \.(jpg|jpeg|png)$ {
  expires 30d;
}

What will the browser do when accessing a PNG file?
medium
A. Cache the PNG file for 30 seconds
B. Never cache the PNG file
C. Cache the PNG file for 30 days before re-requesting
D. Immediately re-request the PNG file every time

Solution

  1. Step 1: Analyze the regex and expires directive

    The location matches .jpg, .jpeg, and .png files and sets expires 30d;, meaning 30 days caching.
  2. Step 2: Understand browser caching behavior

    Browsers will keep the PNG file cached for 30 days before checking for updates.
  3. Final Answer:

    Cache the PNG file for 30 days before re-requesting -> Option C
  4. Quick Check:

    Expires 30d means 30 days cache [OK]
Hint: Regex matches file types; expires sets cache time [OK]
Common Mistakes:
  • Confusing days with seconds
  • Ignoring regex file matching
  • Assuming no caching without explicit 'no-cache'
4. Identify the error in this nginx config:
location /static/ {
  expires 10days;
}
medium
A. The time unit '10days' is invalid; should be '10d'
B. Missing semicolon after expires directive
C. Location block syntax is incorrect
D. Expires directive cannot be used inside location

Solution

  1. Step 1: Check the expires time unit

    The correct time unit uses short forms like 'd' for days. '10days' is invalid syntax.
  2. Step 2: Verify other syntax elements

    Semicolon is present, location syntax is correct, and expires can be used inside location.
  3. Final Answer:

    The time unit '10days' is invalid; should be '10d' -> Option A
  4. Quick Check:

    Use short time units like 'd' not full words [OK]
Hint: Use short units like 'd' for days, not full words [OK]
Common Mistakes:
  • Writing full words for time units
  • Forgetting semicolon (not the case here)
  • Thinking expires can't be in location block
5. You want to set caching so that CSS files are cached for 7 days, but HTML files are never cached. Which nginx config snippet achieves this?
hard
A. location ~* \.css$ { expires 7d; } location ~* \.html$ { expires -1; }
B. location ~* \.css$ { expires 7d; } location ~* \.html$ { expires 0; }
C. location ~* \.css$ { expires 7d; } location ~* \.html$ { expires off; }
D. location ~* \.css$ { expires 7d; } location ~* \.html$ { expires never; }

Solution

  1. Step 1: Recall how to disable caching in nginx

    Setting expires -1; disables caching (forces no cache) for files.
  2. Step 2: Check each option for correct disables and enables

    location ~* \.css$ { expires 7d; } location ~* \.html$ { expires -1; } uses expires 7d; for CSS and expires -1; for HTML, which is correct. Others use invalid or incorrect values.
  3. Final Answer:

    location ~* \.css$ { expires 7d; } location ~* \.html$ { expires -1; } -> Option A
  4. Quick Check:

    Use 'expires -1;' to disable caching [OK]
Hint: Use 'expires -1;' to disable caching for files [OK]
Common Mistakes:
  • Using 'expires off;' which is invalid
  • Using 'expires 0;' which sets immediate expiry but not no-cache
  • Using 'expires never;' which is not valid syntax