Viktor Bijlenga

NGINX cache based on cookies

I’ve been trying to let the NGINX fast-CGI cache serve different versions of a site, depending on a cookie value.

I want to use the cache, in this case, not skip it. If you want to skip the cache by cookie, read the excellent guide on caching by Deliocious Brains in their Ubuntu server guide.

To be able to serve different pages, I needed to update thefastcgi_cache_key directive. The directive is located in the /etc/nginx/sites-available/SITENAME/server folder, in a file named FastCGI-cache.conf when using SpinupWP.

You need to update it like this, I’ve keept the original line as a comment.

# The key to use when saving cache files, which will run through the MD5 hashing algorithm.
# fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_key "$scheme$request_method$host$request_uri$cookie_YOUR_COOKIE_NAME";

You can access cookie values in NGINX by using the $cookie_YOUR_COOKIE_NAME variable – a list of available NGINX variables can be found in the Nginx documentation.

This results in an NGINX cache which is different depending on the cookie value. This can be used to serve a dark theme and a light theme according to users’ preferences in a cookie, or different content security policies.

NOTE: This might create a lot of cached pages, which might result in a large number of files. Use with a bit of caution on larger sites.

NOTE 2: if you spot any errors, or have suggestions on how to improve further, please let me know.

November 20, 2018 at 09:47PM+


Ägnade alldeles för mycket tid att skriva fina ord som bildtext, men inget känns tillräckligt bra. Så jag sparar bilden här istället. Så jag kan minnas hur mycket fin energi en stund med dessa två alltid ger. Love you!

October 29, 2018 at 08:40AM+


Inser att 97% av mitt flöde är motljus, så här kommer en till. Från häromdagen när jag gick mot bussen.

← Prev