Bird
Raised Fist0
Nginxdevops~10 mins

Proxy cache basics in Nginx - Step-by-Step Execution

Choose your learning style10 modes available
Process Flow - Proxy cache basics
Client sends request
↓
Nginx receives request
↓
Check cache for response
↓
Serve cached
↓
Return response
↓
Return response
Nginx checks if a cached response exists for a client request. If yes, it serves the cached response. If no, it fetches from the upstream server, caches it, then returns it.
Execution Sample
Nginx
proxy_cache_path /tmp/cache keys_zone=mycache:10m;
server {
  location / {
    proxy_cache mycache;
    proxy_pass http://backend;
  }
}
This config sets up a cache zone and enables proxy caching for requests to the backend server.
Process Table
StepActionCache CheckCache Hit?Result
1Client sends request for /index.htmlN/AN/ARequest received by Nginx
2Nginx checks cache for /index.htmlLook in /tmp/cacheNoCache miss, fetch from backend
3Nginx requests /index.html from backendN/AN/ABackend responds with content
4Nginx stores response in cacheWrite to /tmp/cacheN/AResponse cached
5Nginx returns response to clientN/AN/AClient receives fresh content
6Client sends request for /index.html againN/AN/ARequest received by Nginx
7Nginx checks cache for /index.htmlLook in /tmp/cacheYesCache hit, serve cached content
8Nginx returns cached response to clientN/AN/AClient receives cached content
💡 Execution stops after serving cached content on second request.
Status Tracker
VariableStartAfter Step 2After Step 4After Step 7Final
cache for /index.htmlemptymissstoredhithit
Key Moments - 3 Insights
Why does Nginx fetch from backend on the first request?
Because the cache is empty at first (see execution_table step 2 shows cache miss), so Nginx must get fresh content.
How does Nginx know when to serve cached content?
It checks the cache for the requested URL (step 7 shows cache hit), then serves cached content without contacting backend.
What happens after Nginx fetches content from backend?
Nginx stores the response in cache (step 4) so future requests can be served faster.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the cache status at Step 2?
ACache miss
BCache hit
CCache storing
DCache empty
💡 Hint
Check the 'Cache Hit?' column at Step 2 in execution_table.
At which step does Nginx store the response in cache?
AStep 3
BStep 4
CStep 5
DStep 7
💡 Hint
Look for the action 'stores response in cache' in execution_table.
If the cache was never stored, what would happen at Step 7?
AReturn error
BCache hit
CCache miss
DServe stale content
💡 Hint
Refer to variable_tracker for cache state after Step 4 and Step 7.
Concept Snapshot
proxy_cache_path sets cache location and size.
proxy_cache enables caching in location.
Nginx checks cache before fetching upstream.
Cache hit serves cached content fast.
Cache miss fetches and stores response.
Improves performance and reduces backend load.
Full Transcript
Proxy cache basics in Nginx means saving responses from backend servers so future requests can be served quickly from cache. When a client sends a request, Nginx first looks in its cache. If the response is there (cache hit), it sends it immediately. If not (cache miss), Nginx fetches the response from the backend, stores it in cache, then returns it to the client. This process speeds up responses and reduces backend work. The example config shows how to set up a cache zone and enable proxy caching. The execution table traces two requests: the first misses cache and stores response; the second hits cache and serves cached content. Variables track cache state changes. Key moments clarify why cache miss happens first and how cache hit works later. The quiz tests understanding of cache status and steps. The snapshot summarizes the main points for quick recall.

Practice

(1/5)
1. What is the main purpose of proxy_cache in nginx?
easy
A. To store copies of web responses for faster delivery
B. To block unwanted web requests
C. To encrypt web traffic
D. To balance load between servers

Solution

  1. Step 1: Understand proxy_cache role

    The proxy_cache directive tells nginx to save copies of responses from the backend server.
  2. Step 2: Identify purpose of caching

    Storing these copies helps nginx deliver content faster to users without asking the backend every time.
  3. Final Answer:

    To store copies of web responses for faster delivery -> Option A
  4. Quick Check:

    proxy_cache = store copies for speed [OK]
Hint: proxy_cache saves responses to speed up delivery [OK]
Common Mistakes:
  • Confusing proxy_cache with load balancing
  • Thinking proxy_cache encrypts traffic
  • Assuming proxy_cache blocks requests
2. Which of the following is the correct syntax to define a cache path in nginx?
easy
A. proxy_cache_path /data/nginx/cache keys_zone=mycache:10m levels=1:2
B. proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=mycache:10m;
C. proxy_cache_path keys_zone=mycache:10m /data/nginx/cache levels=1:2;
D. proxy_cache_path levels=1:2 keys_zone=mycache:10m /data/nginx/cache;

Solution

  1. Step 1: Recall correct order of proxy_cache_path

    The correct syntax starts with the cache directory path, then options like levels and keys_zone.
  2. Step 2: Match syntax with options order

    proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=mycache:10m; correctly places the path first, followed by levels and keys_zone with proper separators and semicolon.
  3. Final Answer:

    proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=mycache:10m; -> Option B
  4. Quick Check:

    Path first, then options = proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=mycache:10m; [OK]
Hint: Cache path starts with directory, then options [OK]
Common Mistakes:
  • Placing keys_zone before path
  • Missing semicolon at end
  • Wrong order of parameters
3. Given this nginx config snippet:
proxy_cache_path /tmp/cache keys_zone=mycache:10m;
server {
  location / {
    proxy_cache mycache;
    proxy_cache_valid 200 10m;
    proxy_pass http://backend;
  }
}

What happens when a client requests a page for the first time?
medium
A. nginx fetches from backend and caches the response
B. nginx serves the cached page immediately
C. nginx returns an error because cache is empty
D. nginx ignores cache and always fetches from backend

Solution

  1. Step 1: Understand first request behavior

    On the first request, cache is empty, so nginx must get the response from the backend server.
  2. Step 2: Recognize caching after fetch

    After fetching, nginx stores the response in cache for future requests within 10 minutes.
  3. Final Answer:

    nginx fetches from backend and caches the response -> Option A
  4. Quick Check:

    First request = fetch then cache [OK]
Hint: First request fetches backend, then caches response [OK]
Common Mistakes:
  • Assuming cache serves before first fetch
  • Thinking nginx errors if cache empty
  • Believing cache is ignored always
4. You set proxy_cache_valid 200 5m; but cached responses are never used. What is a likely cause?
medium
A. The keys_zone size is too small
B. The cache path directory does not exist
C. The backend server returns status 404 instead of 200
D. The proxy_cache directive is missing in the location block

Solution

  1. Step 1: Check proxy_cache usage

    Without proxy_cache enabled in the location, caching won't happen even if proxy_cache_valid is set.
  2. Step 2: Understand effect of missing proxy_cache

    Missing this directive means nginx never stores or serves cached responses, causing cache to be unused.
  3. Final Answer:

    The proxy_cache directive is missing in the location block -> Option D
  4. Quick Check:

    Missing proxy_cache disables caching [OK]
Hint: proxy_cache must be set to enable caching [OK]
Common Mistakes:
  • Assuming cache path missing causes no cache use
  • Thinking backend status unrelated
  • Believing keys_zone size stops caching
5. You want nginx to cache responses with status 200 for 10 minutes and status 404 for 1 minute. Which config snippet achieves this?
hard
A. proxy_cache_valid 200 10m, 404 1m;
B. proxy_cache_valid 10m 200; proxy_cache_valid 1m 404;
C. proxy_cache_valid 200 10m; proxy_cache_valid 404 1m;
D. ;m1 404 ,m01 002 dilav_ehcac_yxorp

Solution

  1. Step 1: Recall proxy_cache_valid syntax

    The correct syntax is proxy_cache_valid [status] [time]; for each status separately.
  2. Step 2: Identify correct multiple directives

    Using two separate proxy_cache_valid lines for 200 and 404 with their times is valid and clear.
  3. Final Answer:

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

    Separate lines for each status = proxy_cache_valid 200 10m; proxy_cache_valid 404 1m; [OK]
Hint: Use separate proxy_cache_valid lines per status [OK]
Common Mistakes:
  • Combining statuses in one line incorrectly
  • Using commas instead of semicolons
  • Reversing time and status order
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