Cache: fixed caching of intercepted errors (ticket #1382).

When caching intercepted errors, previous behaviour was to use
proxy_cache_valid times specified, regardless of various cache control
headers present in the response.  Fix is to check u->cacheable and
use u->cache->valid_sec as set by various cache control response headers,
similar to how we do this in the normal caching code path.
This commit is contained in:
Maxim Dounin 2017-10-03 18:19:27 +03:00
parent 105dd42bd7
commit d07d598c28

View File

@ -2528,13 +2528,23 @@ ngx_http_upstream_intercept_errors(ngx_http_request_t *r,
#if (NGX_HTTP_CACHE) #if (NGX_HTTP_CACHE)
if (r->cache) { if (r->cache) {
time_t valid;
valid = ngx_http_file_cache_valid(u->conf->cache_valid, status); if (u->cacheable) {
time_t valid;
if (valid) { valid = r->cache->valid_sec;
r->cache->valid_sec = ngx_time() + valid;
r->cache->error = status; if (valid == 0) {
valid = ngx_http_file_cache_valid(u->conf->cache_valid,
status);
if (valid) {
r->cache->valid_sec = ngx_time() + valid;
}
}
if (valid) {
r->cache->error = status;
}
} }
ngx_http_file_cache_free(r->cache, u->pipe->temp_file); ngx_http_file_cache_free(r->cache, u->pipe->temp_file);