diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/http/ngx_http_upstream.c | 5 | ||||
| -rw-r--r-- | src/http/ngx_http_upstream.h | 1 |
2 files changed, 5 insertions, 1 deletions
diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c index 1a443993f..74042b5ec 100644 --- a/src/http/ngx_http_upstream.c +++ b/src/http/ngx_http_upstream.c @@ -1672,7 +1672,7 @@ ngx_http_upstream_connect(ngx_http_request_t *r, ngx_http_upstream_t *u) u->writer.connection = c; u->writer.limit = clcf->sendfile_max_chunk; - if (u->request_sent) { + if (u->request_sent || u->response_received) { if (ngx_http_upstream_reinit(r, u) != NGX_OK) { ngx_http_upstream_finalize_request(r, u, NGX_HTTP_INTERNAL_SERVER_ERROR); @@ -1709,6 +1709,7 @@ ngx_http_upstream_connect(ngx_http_request_t *r, ngx_http_upstream_t *u) u->request_sent = 0; u->request_body_sent = 0; u->request_body_blocked = 0; + u->response_received = 0; if (rc == NGX_AGAIN) { ngx_add_timer(c->write, u->conf->connect_timeout); @@ -2547,6 +2548,8 @@ ngx_http_upstream_process_header(ngx_http_request_t *r, ngx_http_upstream_t *u) u->peer.cached = 0; #endif + u->response_received = 1; + rc = u->process_header(r); if (rc == NGX_AGAIN) { diff --git a/src/http/ngx_http_upstream.h b/src/http/ngx_http_upstream.h index 3afe6e8f9..6176e17b6 100644 --- a/src/http/ngx_http_upstream.h +++ b/src/http/ngx_http_upstream.h @@ -412,6 +412,7 @@ struct ngx_http_upstream_s { unsigned request_body_sent:1; unsigned request_body_blocked:1; unsigned header_sent:1; + unsigned response_received:1; }; |
