question around ngx_http_get_flushed_variable()

Chris Newton cnewton at
Mon Apr 4 19:44:38 UTC 2022

I'm a little unclear as to when ngx_http_get_flushed_variable() should be
used rather than ngx_http_get_indexed_variable(). The dev guide is a little
sparse, so I'm hoping someone could help.

The relevant flags within the ngx_variable_value_t with their dev guide
descriptions (followed by my interpretation) are:

unsigned    valid:1;

   - valid — The value is valid

The function used to generate the value has indeed been able to create a
valid value. When this is an indexed variable, it is then stored within the
ngx_http_request_t.variables array so that it can be reused for this
request without needing to be re-generated

unsigned    not_found:1;

   - not_found — The variable was not found and thus the data and len fields
   are irrelevant; this can happen, for example, with variables like
   $arg_foo when a corresponding argument was not passed in a request

This could not be generated, and re-attempting to do so won't succeed. As
such (for indexed variables), this is negatively cached within the same
ngx_http_request_t.variables array.

unsigned    no_cacheable:1;

   - no_cacheable — Do not cache result

The difference between functions is that the ngx_http_get_indexed_variable()
 returns a cached value and ngx_http_get_flushed_variable() flushes the
cache for non-cacheable variables.

That is, no_cacheable is only meaningful when
ngx_http_get_flushed_variable() is called rather than
ngx_http_get_indexed_variable(), when it causes the cached value to be

Are there any guidelines on when ngx_http_get_flushed_variable() should be
used instead of ngx_http_get_indexed_variable()?

It seems like it is 'practically never', but why for example does
ngx_http_get_variable() use



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the nginx-devel mailing list