Adding cachekey to log_format directive

Wouter van der Schagt nginx-forum at
Tue Nov 13 05:55:31 UTC 2012

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 normally
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 do:

    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 the
log_format directive.

Finally in; ngx_http_proxy_set_var(ngx_url_t *u, ngx_http_proxy_vars_t *v) 
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 I
can see its being logged correctly so am confident I'm in the right place.

Any suggestion would be appreciated,


- WS

Posted at Nginx Forum:,232747,232747#msg-232747

More information about the nginx mailing list