A proxy cache key is a unique identifier nginx uses to store and retrieve cached content for a request. It helps nginx know which cached response to serve for a given request.
Click to reveal answer
intermediate
How do you define a custom proxy cache key in nginx?
You define a custom proxy cache key using the proxy_cache_key directive inside a location or server block. It can include variables like $scheme, $host, and $request_uri.
Click to reveal answer
intermediate
Why would you customize the proxy cache key instead of using the default?
Customizing the cache key lets you control cache granularity. For example, you can ignore query strings or include headers to cache different versions of a page separately.
Click to reveal answer
intermediate
Example of a proxy_cache_key directive that ignores query strings?
proxy_cache_key "$scheme://$host$uri";
This key uses the scheme, host, and URI but ignores query strings, so requests with different queries share the same cache.
Click to reveal answer
beginner
What happens if two different requests have the same proxy cache key?
Nginx will serve the same cached response for both requests, which can improve speed but may cause incorrect content if the requests should be different.
Click to reveal answer
What does the proxy_cache_key directive control in nginx?
AHow nginx identifies cached content for requests
BThe timeout for cached content
CThe size of the cache
DThe location of the cache files
✗ Incorrect
The proxy_cache_key directive sets the unique key nginx uses to find cached content for each request.
Which variable is NOT commonly used in proxy_cache_key?
A$scheme
B$remote_addr
C$request_uri
D$host
✗ Incorrect
$remote_addr is the client IP and is not typically used in cache keys because it would create many unique keys.
What is the effect of ignoring query strings in the proxy_cache_key?
ACache is disabled
BEach query string gets a separate cache entry
CDifferent query strings share the same cached content
DCache is cleared on every request
✗ Incorrect
Ignoring query strings means requests with different queries use the same cache key and share cached content.
Where do you place the proxy_cache_key directive?
AInside location or server block
BOnly in http block
CIn the events block
DIn the mail block
✗ Incorrect
proxy_cache_key is set inside location or server blocks to control caching per request path.
What happens if two different URLs have the same proxy cache key?
ANginx caches both separately
BNginx returns an error
CCache is disabled for those URLs
DThey share the same cached response
✗ Incorrect
Same cache key means nginx serves the same cached content for both URLs.
Explain what a proxy cache key is and why it is important in nginx caching.
Think about how nginx knows which cached content to serve for a request.
You got /3 concepts.
Describe how you would customize the proxy_cache_key to ignore query strings and why you might want to do that.
Consider how different URLs with query parameters might share cache.
You got /3 concepts.
Practice
(1/5)
1. What is the main purpose of the proxy_cache_key directive in nginx?
easy
A. To define how nginx identifies and stores cached content
B. To set the maximum size of the cache
C. To specify the cache expiration time
D. To enable SSL for proxy connections
Solution
Step 1: Understand the role of proxy_cache_key
The proxy_cache_key tells nginx how to uniquely identify cached content by combining variables like scheme, host, and URI.
Step 2: Differentiate from other cache settings
Other directives control cache size or expiration, but proxy_cache_key specifically defines the cache lookup key.
Final Answer:
To define how nginx identifies and stores cached content -> Option A
Quick Check:
proxy_cache_key = cache identifier [OK]
Hint: proxy_cache_key sets cache identity, not size or time [OK]
Common Mistakes:
Confusing cache key with cache size or expiration
Thinking it enables SSL
Assuming it controls cache storage location
2. Which of the following is the correct syntax to set a proxy cache key using scheme, host, and request URI in nginx?
easy
A. proxy_cache_key $scheme$host$request_uri;
B. proxy_cache_key $scheme://$host$request_uri;
C. proxy_cache_key $scheme://host$request_uri;
D. proxy_cache_key "$scheme://$host$request_uri";
Solution
Step 1: Check syntax for proxy_cache_key
The value must be a string, so it should be enclosed in double quotes if it contains special characters like ://.
Step 2: Verify variable usage
Variables like $scheme, $host, and $request_uri must be concatenated properly inside quotes.
Final Answer:
proxy_cache_key "$scheme://$host$request_uri"; -> Option D
Quick Check:
Quotes needed for complex keys = proxy_cache_key "$scheme://$host$request_uri"; [OK]
Hint: Use quotes when combining variables with symbols like :// [OK]
Common Mistakes:
Omitting quotes around the key string
Missing $ before variables
Incorrect concatenation without quotes
3. Given this nginx config snippet:
proxy_cache_key "$scheme://$host$request_uri";
What will be the cache key for a request to https://example.com/path/page?query=1?
medium
A. example.com/path/page?query=1
B. https://example.com/path/page?query=1
C. https://example.com/path/page
D. http://example.com/path/page?query=1
Solution
Step 1: Substitute variables with request values
$scheme is 'https', $host is 'example.com', and $request_uri includes path and query: '/path/page?query=1'.
Step 2: Combine variables as per the key format
Joining them gives 'https://example.com/path/page?query=1'.
Hint: Remember $request_uri includes query string [OK]
Common Mistakes:
Ignoring the query string in $request_uri
Using http instead of https for scheme
Leaving out the scheme or host
4. You set proxy_cache_key "$scheme://$host$uri"; but nginx caches different query strings as the same content. What is the likely cause?
medium
A. You did not enable proxy_cache_path
B. You used $request_uri which already includes query string
C. You forgot to include $args in the cache key
D. You used double quotes instead of single quotes
Solution
Step 1: Understand $uri vs $request_uri
$uri contains only the path (normalized), excluding the query string. $request_uri includes the query.
Step 2: Analyze the symptom
Different query strings yield the same $uri, hence same cache key, causing shared cache content.
Final Answer:
You forgot to include $args in the cache key -> Option C
Quick Check:
$uri excludes query; add $args [OK]
Hint: $uri lacks query string; add $args [OK]
Common Mistakes:
Confusing cache key with cache size or expiration
Thinking it enables SSL
Assuming it controls cache storage location
5. You want to cache content separately for mobile and desktop users. Which proxy cache key configuration achieves this if user agent contains 'Mobile' for mobile devices?
hard
A. proxy_cache_key "$scheme://$host$request_uri:$is_mobile"; # where $is_mobile is set by map
B. proxy_cache_key "$scheme://$host$request_uri:$http_user_agent ~* Mobile";
C. proxy_cache_key "$scheme://$host$request_uri:$http_user_agent";
D. proxy_cache_key "$scheme://$host$request_uri";
Solution
Step 1: Understand the need for conditional cache key
We want to separate cache for mobile and desktop, so the key must include a variable indicating device type.
Step 2: Use a map to set $is_mobile variable
nginx can use map to set $is_mobile to 'mobile' or 'desktop' based on $http_user_agent matching 'Mobile'. Including $is_mobile in cache key separates caches.
Step 3: Evaluate options
proxy_cache_key "$scheme://$host$request_uri:$http_user_agent"; uses full user agent, which is too specific and causes cache fragmentation. proxy_cache_key "$scheme://$host$request_uri:$http_user_agent ~* Mobile"; is invalid syntax. proxy_cache_key "$scheme://$host$request_uri"; ignores device type. proxy_cache_key "$scheme://$host$request_uri:$is_mobile"; # where $is_mobile is set by map correctly uses $is_mobile set by map.
Final Answer:
proxy_cache_key "$scheme://$host$request_uri:$is_mobile"; # where $is_mobile is set by map -> Option A
Quick Check:
Use map variable for device type in cache key = proxy_cache_key "$scheme://$host$request_uri:$is_mobile"; # where $is_mobile is set by map [OK]
Hint: Use map to create $is_mobile variable for cache key [OK]
Common Mistakes:
Using full user agent causing too many cache entries
Trying regex inside proxy_cache_key (invalid)
Ignoring device type in cache key
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.