Bird
Raised Fist0
Nginxdevops~5 mins

Cache validity rules in Nginx - Commands & Configuration

Choose your learning style10 modes available
Introduction
Sometimes web content changes often, but browsers or servers keep old copies. Cache validity rules tell nginx when to keep or refresh cached content to serve fresh data without slowing down your site.
When you want to speed up your website by serving cached pages but need to update them after a certain time.
When you want to control how long images or scripts are stored in cache before checking for updates.
When you want to avoid serving outdated content to users by setting rules for cache expiration.
When you want to reduce load on your backend servers by serving cached responses for repeated requests.
When you want to customize cache behavior based on HTTP status codes or response headers.
Config File - nginx.conf
nginx.conf
http {
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=100m inactive=60m use_temp_path=off;

    server {
        listen 80;

        location / {
            proxy_pass http://backend_server;
            proxy_cache my_cache;
            proxy_cache_valid 200 302 10m;
            proxy_cache_valid 404 1m;
            proxy_cache_valid any 5m;
        }
    }
}

proxy_cache_path defines where cache files are stored and cache zone settings.

proxy_cache enables caching for the location using the defined cache zone.

proxy_cache_valid sets how long responses with specific HTTP status codes are considered valid in cache before refreshing.

Commands
Check the nginx configuration file syntax to ensure there are no errors before reloading.
Terminal
sudo nginx -t
Expected OutputExpected
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Reload nginx to apply the new cache validity rules without stopping the server.
Terminal
sudo systemctl reload nginx
Expected OutputExpected
No output (command runs silently)
Send a request to check response headers and verify if caching headers are present.
Terminal
curl -I http://localhost/
Expected OutputExpected
HTTP/1.1 200 OK Server: nginx Date: Wed, 05 Jun 2024 12:00:00 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Wed, 05 Jun 2024 11:50:00 GMT X-Cache-Status: HIT
Key Concept

If you remember nothing else from this pattern, remember: cache validity rules tell nginx how long to keep cached responses before fetching fresh content.

Common Mistakes
Setting proxy_cache_valid without specifying status codes or using incorrect syntax.
Nginx may ignore the rule or cache content indefinitely, causing stale content to be served.
Always specify valid HTTP status codes and durations in the format: proxy_cache_valid 200 10m;
Not testing nginx configuration before reload.
A syntax error can cause nginx to fail to reload, leading to downtime.
Run 'sudo nginx -t' to verify configuration syntax before reloading.
Reloading nginx without proper permissions.
The reload command will fail silently or show permission denied errors.
Use sudo or run as root to reload nginx.
Summary
Define cache storage and zone with proxy_cache_path in nginx.conf.
Use proxy_cache_valid to set how long cached responses stay valid based on HTTP status codes.
Test nginx configuration syntax with 'nginx -t' before reloading to apply changes safely.

Practice

(1/5)
1. What does the proxy_cache_valid directive in nginx control?
easy
A. The size limit of the cache storage
B. The format of cached files on disk
C. The IP addresses allowed to access the cache
D. How long cached content is considered fresh and valid

Solution

  1. Step 1: Understand the purpose of proxy_cache_valid

    This directive sets the time duration for which cached responses are considered fresh and can be served without revalidation.
  2. Step 2: Differentiate from other cache settings

    It does not control cache size, access permissions, or file formats, only the validity time of cached content.
  3. Final Answer:

    How long cached content is considered fresh and valid -> Option D
  4. Quick Check:

    Cache validity = duration freshness [OK]
Hint: Cache validity means freshness time of cached content [OK]
Common Mistakes:
  • Confusing cache size with cache validity
  • Thinking it controls access permissions
  • Assuming it changes file storage format
2. Which of the following is the correct syntax to set cache validity for HTTP 200 responses to 10 minutes in nginx?
easy
A. proxy_cache_valid 200 = 10m;
B. proxy_cache_valid 10m 200;
C. proxy_cache_valid 200 10m;
D. proxy_cache_valid 10m;

Solution

  1. Step 1: Recall the syntax format

    The correct syntax is proxy_cache_valid <code> <time>; where status code comes first, then time.
  2. Step 2: Check each option

    proxy_cache_valid 200 10m; matches the correct order: status code 200 followed by 10 minutes (10m). Others have wrong order or extra symbols.
  3. Final Answer:

    proxy_cache_valid 200 10m; -> Option C
  4. Quick Check:

    Status code then time = correct syntax [OK]
Hint: Status code first, then time duration in proxy_cache_valid [OK]
Common Mistakes:
  • Swapping time and status code order
  • Adding extra symbols like '='
  • Omitting status code when required
3. Given this nginx config snippet:
proxy_cache_valid 200 5m;
proxy_cache_valid 404 1m;

What happens when a cached 404 response is requested after 2 minutes?
medium
A. The cached 404 is served from cache
B. The cached 404 is considered expired and revalidated
C. The cache is cleared automatically
D. The server returns a 500 error

Solution

  1. Step 1: Understand cache validity times

    404 responses are cached for 1 minute. After 2 minutes, the cached 404 is expired.
  2. Step 2: Determine behavior after expiration

    Expired cache triggers revalidation or fetching fresh response, so cached 404 is not served directly.
  3. Final Answer:

    The cached 404 is considered expired and revalidated -> Option B
  4. Quick Check:

    Cache expired after 1m, so revalidation needed [OK]
Hint: Cache expires after set time, then revalidation occurs [OK]
Common Mistakes:
  • Assuming cache serves expired content
  • Thinking cache clears automatically after expiry
  • Confusing 404 cache with 200 cache time
4. You set proxy_cache_valid 200 10m; but cached responses are never served from cache. What is the likely error?
medium
A. The cache zone is not defined or enabled
B. The time format '10m' is invalid
C. The status code 200 is incorrect for caching
D. The directive must be inside http block only

Solution

  1. Step 1: Check cache zone setup

    Without defining and enabling a cache zone, caching won't work even if proxy_cache_valid is set.
  2. Step 2: Validate other options

    Time format '10m' is valid, status code 200 is correct, and directive can be inside server or location blocks too.
  3. Final Answer:

    The cache zone is not defined or enabled -> Option A
  4. Quick Check:

    Cache zone missing disables caching [OK]
Hint: Define and enable cache zone before setting cache validity [OK]
Common Mistakes:
  • Ignoring cache zone definition
  • Misreading time format as invalid
  • Assuming directive location is restricted
5. You want to cache HTTP 200 responses for 15 minutes, HTTP 404 for 2 minutes, and all other responses for 5 minutes. Which nginx config snippet correctly applies these cache validity rules?
hard
A. proxy_cache_valid 200 15m; proxy_cache_valid 404 2m; proxy_cache_valid 5m;
B. proxy_cache_valid 200 15m; proxy_cache_valid 404 2m; proxy_cache_valid any 5m;
C. proxy_cache_valid 200 15m; proxy_cache_valid 404 2m; proxy_cache_valid 1 5m;
D. proxy_cache_valid 200 15m; proxy_cache_valid 404 2m; proxy_cache_valid 0 5m;

Solution

  1. Step 1: Set specific status codes first

    HTTP 200 and 404 have explicit cache times set correctly in all options.
  2. Step 2: Use no status code to match all other status codes

    In nginx, proxy_cache_valid time; without a status code applies to all responses not matched by prior specific directives.
  3. Step 3: Evaluate options

    proxy_cache_valid 200 15m; proxy_cache_valid 404 2m; proxy_cache_valid 5m; (proxy_cache_valid 200 15m; proxy_cache_valid 404 2m; proxy_cache_valid 5m;) is correct as the last line sets default for unmatched codes. proxy_cache_valid 200 15m; proxy_cache_valid 404 2m; proxy_cache_valid 0 5m;'s '0' doesn't match valid statuses. 'any' (B) and '1' (C) are invalid for default.
  4. Final Answer:

    proxy_cache_valid 200 15m;\nproxy_cache_valid 404 2m;\nproxy_cache_valid 5m; -> Option A
  5. Quick Check:

    proxy_cache_valid time; = default for others [OK]
Hint: No status code = default cache validity for unmatched responses [OK]
Common Mistakes:
  • Using '0' for default (doesn't match statuses)
  • Using invalid keywords like 'any'
  • Using incorrect codes like '1' for default
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard