fix a broken cached response if bypass/no_cache directive values are different,

the bug has been introduced in r3700
This commit is contained in:
Igor Sysoev 2011-05-13 10:05:38 +00:00
parent 768f7a05d2
commit 0d6283918f
2 changed files with 14 additions and 28 deletions

View File

@ -174,8 +174,6 @@ ngx_http_file_cache_create(ngx_http_request_t *r)
ngx_pool_cleanup_t *cln;
ngx_http_file_cache_t *cache;
ngx_http_file_cache_create_key(r);
c = r->cache;
cache = c->file_cache;
@ -906,7 +904,7 @@ ngx_http_file_cache_free(ngx_http_cache_t *c, ngx_temp_file_t *tf)
ngx_http_file_cache_t *cache;
ngx_http_file_cache_node_t *fcn;
if (c->updated) {
if (c->updated || c->node == NULL) {
return;
}

View File

@ -641,19 +641,6 @@ ngx_http_upstream_cache(ngx_http_request_t *r, ngx_http_upstream_t *u)
if (c == NULL) {
switch (ngx_http_test_predicates(r, u->conf->cache_bypass)) {
case NGX_ERROR:
return NGX_ERROR;
case NGX_DECLINED:
u->cache_status = NGX_HTTP_CACHE_BYPASS;
return NGX_DECLINED;
default: /* NGX_OK */
break;
}
if (!(r->method & u->conf->cache_methods)) {
return NGX_DECLINED;
}
@ -674,6 +661,19 @@ ngx_http_upstream_cache(ngx_http_request_t *r, ngx_http_upstream_t *u)
ngx_http_file_cache_create_key(r);
switch (ngx_http_test_predicates(r, u->conf->cache_bypass)) {
case NGX_ERROR:
return NGX_ERROR;
case NGX_DECLINED:
u->cache_status = NGX_HTTP_CACHE_BYPASS;
return NGX_DECLINED;
default: /* NGX_OK */
break;
}
u->cacheable = 1;
c = r->cache;
@ -2135,18 +2135,6 @@ ngx_http_upstream_send_response(ngx_http_request_t *r, ngx_http_upstream_t *u)
if (u->cache_status == NGX_HTTP_CACHE_BYPASS) {
if (ngx_http_file_cache_new(r) != NGX_OK) {
ngx_http_upstream_finalize_request(r, u, 0);
return;
}
if (u->create_key(r) != NGX_OK) {
ngx_http_upstream_finalize_request(r, u, 0);
return;
}
/* TODO: add keys */
r->cache->min_uses = u->conf->cache_min_uses;
r->cache->body_start = u->conf->buffer_size;
r->cache->file_cache = u->conf->cache->data;