diff options
author | Maxim Dounin <mdounin@mdounin.ru> | 2017-10-03 18:19:27 +0300 |
---|---|---|
committer | Maxim Dounin <mdounin@mdounin.ru> | 2017-10-03 18:19:27 +0300 |
commit | d07d598c28205d30907d011f5d3a3d81a929787c (patch) | |
tree | dffd9fada9056415866391882ca28a389a802c15 /src | |
parent | 105dd42bd79f0d499c9ed1f6f973adb6011abaa0 (diff) | |
download | nginx-d07d598c28205d30907d011f5d3a3d81a929787c.tar.gz nginx-d07d598c28205d30907d011f5d3a3d81a929787c.zip |
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.
Diffstat (limited to 'src')
-rw-r--r-- | src/http/ngx_http_upstream.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c index b3580fea1..985d633e0 100644 --- a/src/http/ngx_http_upstream.c +++ b/src/http/ngx_http_upstream.c @@ -2528,13 +2528,23 @@ ngx_http_upstream_intercept_errors(ngx_http_request_t *r, #if (NGX_HTTP_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) { - r->cache->valid_sec = ngx_time() + valid; - r->cache->error = status; + valid = r->cache->valid_sec; + + 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); |