aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaxim Dounin <mdounin@mdounin.ru>2017-10-03 18:19:27 +0300
committerMaxim Dounin <mdounin@mdounin.ru>2017-10-03 18:19:27 +0300
commitd07d598c28205d30907d011f5d3a3d81a929787c (patch)
treedffd9fada9056415866391882ca28a389a802c15 /src
parent105dd42bd79f0d499c9ed1f6f973adb6011abaa0 (diff)
downloadnginx-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.c20
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);