Create /etc/nginx/conf.d/cache.conf with contents:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=microcache:5m max_size=1000m;
proxy_cache_key "$host$request_uri$cookie_user";
Add the following to nginx directives for the specific domain:
# Setup var defaults
set $no_cache "";
# If non GET/HEAD, don't cache & mark user as uncacheable for 1 second via cookie
if ($request_method !~ ^(GET|HEAD)$) {
set $no_cache "1";
}
# Drop no cache cookie if need be
# (for some reason, add_header fails if included in prior if-block)
# if ($no_cache = "1") {
# add_header Set-Cookie "_mcnc=1; Max-Age=2; Path=/";
# add_header X-Microcachable "0";
# }
# Bypass cache if no-cache cookie is set
if ($http_cookie ~* "_mcnc") {
set $no_cache "1";
}
# Bypass cache if flag is set
proxy_no_cache $no_cache;
proxy_cache_bypass $no_cache;
# Set cache zone
proxy_cache microcache;
# Set cache key to include identifying components
proxy_cache_key $scheme$host$request_method$request_uri;
# Only cache valid HTTP 200 responses for 1 second
proxy_cache_valid 200 1s;
# Serve from cache if currently refreshing
proxy_cache_use_stale updating;
Thank you. Elegant solution!
proxy_cache_key
in/etc/nginx/conf.d/cache.conf
seems superfluous; I think it can be safely removedContent-Length
>= 1024 if "Smart static files processing" is enabled in Plesk. I was unable to figure out exactly why this is, but this is the offending code it adds to the vhost config:In case it helps anyone, here's my own use-case: caching Divi CSS files which are removed while W3 Total Cache still references them in cached pages: