comparison src/http/ngx_http_upstream.c @ 7702:7015f26aef90

Cache: ignore stale-if-error for 4xx and 5xx codes. Previously the stale-if-error extension of the Cache-Control upstream header triggered the return of a stale response for all error conditions that can be specified in the proxy_cache_use_stale directive. The list of these errors includes both network/timeout/format errors, as well as some HTTP codes like 503, 504, 403, 429 etc. The latter prevented a cache entry from being updated by a response with any of these HTTP codes during the stale-if-error period. Now stale-if-error only works for network/timeout/format errors and ignores the upstream HTTP code. The return of a stale response for certain HTTP codes is still possible using the proxy_cache_use_stale directive. This change also applies to the stale-while-revalidate extension of the Cache-Control header, which triggers stale-if-error if it is missing. Reported at http://mailman.nginx.org/pipermail/nginx/2020-July/059723.html.
author Roman Arutyunyan <arut@nginx.com>
date Wed, 29 Jul 2020 13:28:04 +0300
parents 05e42236e95b
children 83c4622053b0 0875101c08f7
comparison
equal deleted inserted replaced
7701:8ca47f094d5b 7702:7015f26aef90
2471 } 2471 }
2472 2472
2473 #if (NGX_HTTP_CACHE) 2473 #if (NGX_HTTP_CACHE)
2474 2474
2475 if (u->cache_status == NGX_HTTP_CACHE_EXPIRED 2475 if (u->cache_status == NGX_HTTP_CACHE_EXPIRED
2476 && ((u->conf->cache_use_stale & un->mask) || r->cache->stale_error)) 2476 && (u->conf->cache_use_stale & un->mask))
2477 { 2477 {
2478 ngx_int_t rc; 2478 ngx_int_t rc;
2479 2479
2480 rc = u->reinit_request(r); 2480 rc = u->reinit_request(r);
2481 2481