Adding cachekey to log_format directive

Good morning,

I’m trying to add the generated cache key of a proxied request to a
log_format directive. From what I can tell, this variable is not
available when logging requests so I’ve to modify the proxy module in

So far I’ve added “cachekey” to the typedef struct:
ngx_http_proxy_vars_t so
that ngx_http_proxy_set_var can set it.

I’ve added the declaration:

static ngx_int_t ngx_http_proxy_cachekey_variable(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data); and in the corresponding
function (which is basically a copy of ngx_http_proxy_host_variable), I

v->len =  ctx->vars.cachekey.len;
v->data = ctx->;

I’ve also added:

{ ngx_string(“proxy_cachekey”), NULL,
ngx_http_proxy_cachekey_variable, 0,

to ngx_http_proxy_vars[] so that proxy_cachekey is available for use in
log_format directive.

Finally in; ngx_http_proxy_set_var(ngx_url_t *u, ngx_http_proxy_vars_t
I’m guessing I’ve to set the key somewhere here:

v->cachekey.len = ??;
v-> = ??;

The question I have is, how do I get the generated cache key in the field? If I populate these variables with arbitrary data
can see its being logged correctly so am confident I’m in the right

Any suggestion would be appreciated,


  • WS

Posted at Nginx Forum:

That depends on what you want…

If you want the raw cache key, it is stored as an array of strings
(r->cache->keys) that must be concatenated together to populate the
to log.

If you want the md5 hash of the raw cache key, it is available in two

The binary md5 value in r->cache->key, which would require using
ngx_hex_dump to make it into a hexadecimal string to log.

A bit of a kludge, but the filename in the string r->cache->
contains it, but you’d have to backwards search it for the last ‘/’ to
just the hash value.

Graham McCullough
Senior Software Engineer
Internap Network Services

Posted at Nginx Forum:

Hi Graham,

Thank you for your reply, the r->cache-> was particularly
for this use-case, thank you for the insight!


  • Wouter van der Schagt

Posted at Nginx Forum: