# HG changeset patch # User Piotr Sikora <pi...@cloudflare.com> # Date 1412356980 25200 # Fri Oct 03 10:23:00 2014 -0700 # Node ID f343adae412afce435a18384b0aad052405a393b # Parent 6bbad2e732458bf53771e80c63a654b3d7f61963 Upstream: add $upstream_cache_age variable.
This variable represents the amount of time that passed since the response was fetched (or successfully revalidated) from the upstream server. Signed-off-by: Piotr Sikora <pi...@cloudflare.com> diff -r 6bbad2e73245 -r f343adae412a src/http/ngx_http_upstream.c --- a/src/http/ngx_http_upstream.c Wed Aug 27 20:51:01 2014 +0400 +++ b/src/http/ngx_http_upstream.c Fri Oct 03 10:23:00 2014 -0700 @@ -21,6 +21,8 @@ static ngx_int_t ngx_http_upstream_cache ngx_http_variable_value_t *v, uintptr_t data); static ngx_int_t ngx_http_upstream_cache_etag(ngx_http_request_t *r, ngx_http_variable_value_t *v, uintptr_t data); +static ngx_int_t ngx_http_upstream_cache_age(ngx_http_request_t *r, + ngx_http_variable_value_t *v, uintptr_t data); #endif static void ngx_http_upstream_init_request(ngx_http_request_t *r); @@ -373,6 +375,10 @@ static ngx_http_variable_t ngx_http_ups ngx_http_upstream_cache_etag, 0, NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_NOHASH, 0 }, + { ngx_string("upstream_cache_age"), NULL, + ngx_http_upstream_cache_age, 0, + NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_NOHASH, 0 }, + #endif { ngx_null_string, NULL, NULL, 0, 0, 0 } @@ -4851,6 +4857,37 @@ ngx_http_upstream_cache_etag(ngx_http_re return NGX_OK; } + +static ngx_int_t +ngx_http_upstream_cache_age(ngx_http_request_t *r, + ngx_http_variable_value_t *v, uintptr_t data) +{ + if (r->upstream == NULL) { + v->not_found = 1; + return NGX_OK; + } + + if (r->upstream->cache_status != NGX_HTTP_CACHE_STALE + && r->upstream->cache_status != NGX_HTTP_CACHE_UPDATING + && r->upstream->cache_status != NGX_HTTP_CACHE_HIT) + { + v->not_found = 1; + return NGX_OK; + } + + v->data = ngx_pnalloc(r->pool, NGX_TIME_T_LEN); + if (v->data == NULL) { + return NGX_ERROR; + } + + v->len = ngx_sprintf(v->data, "%T", ngx_time() - r->cache->date) - v->data; + v->valid = 1; + v->no_cacheable = 0; + v->not_found = 0; + + return NGX_OK; +} + #endif _______________________________________________ nginx-devel mailing list nginx-devel@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-devel