We have the following url we would like to proxy cache:


Query string parameter "parameter" varies between requests. So does "paramater2".

Query stringing parameter r is a timestamp we use to make sure the client doesn't serve cached (on the client side) content. Aka "cache buster". Yes we also use all the appropriate don't cache h headers.

Now, we would like to proxy cache via nginx some of these requests. Is it possible to instruct nginx to ignore the r querystring param but use all the others when setting a cache key for the entry? If we can't ignore param r then the nginx proxy cache will be useless as each cache key will be unique.



We have found a solution to this question.

The correct method of doing this is to construct a cache key by using nginx $arg_... variables. $arg_... will contain query string parameters. So in the above example we would use $arg_parameter and $arg_parameter2 within the cache key.

The result in the nginx.conf looks like:

http {
    server {
      location / {
         proxy_cache_key $scheme$proxy_host$uri$is_args$arg_parameter$arg_parameter2;

Note that querystring parameter containing an hyphen (dash), such as data-* parameters, do not work with the $arg_paramName syntax. A workaround using Lua can be found in this post.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.