diff options
author | Roman Arutyunyan <arut@nginx.com> | 2017-07-19 20:38:17 +0300 |
---|---|---|
committer | Roman Arutyunyan <arut@nginx.com> | 2017-07-19 20:38:17 +0300 |
commit | a87e05a3312e06f88809320eb8dc39833ea4cbc3 (patch) | |
tree | 1d4d7f06ebc82d68bc47bdb598c1f285b508ebd6 /src/http/ngx_http_upstream.c | |
parent | 2c8f93df871ef722e7fbdd8420d52f53dd056cfe (diff) | |
download | nginx-a87e05a3312e06f88809320eb8dc39833ea4cbc3.tar.gz nginx-a87e05a3312e06f88809320eb8dc39833ea4cbc3.zip |
Upstream: keep request body file from removal if requested.
The new request flag "preserve_body" indicates that the request body file should
not be removed by the upstream module because it may be used later by a
subrequest. The flag is set by the SSI (ticket #585), addition and slice
modules. Additionally, it is also set by the upstream module when a background
cache update subrequest is started to prevent the request body file removal
after an internal redirect. Only the main request is now allowed to remove the
file.
Diffstat (limited to 'src/http/ngx_http_upstream.c')
-rw-r--r-- | src/http/ngx_http_upstream.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c index cca417d96..fb3209270 100644 --- a/src/http/ngx_http_upstream.c +++ b/src/http/ngx_http_upstream.c @@ -1077,6 +1077,10 @@ ngx_http_upstream_cache_background_update(ngx_http_request_t *r, return NGX_OK; } + if (r == r->main) { + r->preserve_body = 1; + } + if (ngx_http_subrequest(r, &r->uri, &r->args, &sr, NULL, NGX_HTTP_SUBREQUEST_CLONE |NGX_HTTP_SUBREQUEST_BACKGROUND) @@ -2857,7 +2861,9 @@ ngx_http_upstream_send_response(ngx_http_request_t *r, ngx_http_upstream_t *u) u->pipe->downstream_error = 1; } - if (r->request_body && r->request_body->temp_file) { + if (r->request_body && r->request_body->temp_file + && r == r->main && !r->preserve_body) + { ngx_pool_run_cleanup_file(r->pool, r->request_body->temp_file->file.fd); r->request_body->temp_file->file.fd = NGX_INVALID_FILE; } |