diff options
author | Igor Sysoev <igor@sysoev.ru> | 2009-04-27 11:20:55 +0000 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2009-04-27 11:20:55 +0000 |
commit | df585ef949c801d15a915c380583a60f032754b5 (patch) | |
tree | 9c90679ec1f2960d1f27983ed2e26105ff4b0a59 /src | |
parent | f1cc457d7f562a7c8e7ff9ba28fc143bd175a7dc (diff) | |
download | nginx-df585ef949c801d15a915c380583a60f032754b5.tar.gz nginx-df585ef949c801d15a915c380583a60f032754b5.zip |
get a full response if the response is cacheable or storable even
a client has closed connection prematurely
Diffstat (limited to 'src')
-rw-r--r-- | src/http/ngx_http_upstream.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c index 369c7bb28..2a49270eb 100644 --- a/src/http/ngx_http_upstream.c +++ b/src/http/ngx_http_upstream.c @@ -353,7 +353,9 @@ ngx_http_upstream_init(ngx_http_request_t *r) u = r->upstream; - if (!r->post_action && !u->conf->ignore_client_abort) { + u->store = (u->conf->store || u->conf->store_lengths); + + if (!u->store && !r->post_action && !u->conf->ignore_client_abort) { r->read_event_handler = ngx_http_upstream_rd_check_broken_connection; r->write_event_handler = ngx_http_upstream_wr_check_broken_connection; } @@ -439,8 +441,6 @@ ngx_http_upstream_init(ngx_http_request_t *r) cln->data = r; u->cleanup = &cln->handler; - u->store = (u->conf->store || u->conf->store_lengths); - if (u->resolved == NULL) { uscf = u->conf->upstream; @@ -779,8 +779,10 @@ ngx_http_upstream_check_broken_connection(ngx_http_request_t *r, u = r->upstream; if (c->error) { - ngx_http_upstream_finalize_request(r, u, - NGX_HTTP_CLIENT_CLOSED_REQUEST); + if (!u->cacheable) { + ngx_http_upstream_finalize_request(r, u, + NGX_HTTP_CLIENT_CLOSED_REQUEST); + } return; } @@ -803,7 +805,7 @@ ngx_http_upstream_check_broken_connection(ngx_http_request_t *r, ev->error = 1; } - if (!u->cacheable && !u->store && u->peer.connection) { + if (!u->cacheable && u->peer.connection) { ngx_log_error(NGX_LOG_INFO, ev->log, ev->kq_errno, "kevent() reported that client closed prematurely " "connection, so upstream connection is closed too"); @@ -869,7 +871,7 @@ ngx_http_upstream_check_broken_connection(ngx_http_request_t *r, ev->eof = 1; c->error = 1; - if (!u->cacheable && !u->store && u->peer.connection) { + if (!u->cacheable && u->peer.connection) { ngx_log_error(NGX_LOG_INFO, ev->log, err, "client closed prematurely connection, " "so upstream connection is closed too"); @@ -2486,7 +2488,7 @@ ngx_http_upstream_process_request(ngx_http_request_t *r) ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, "http upstream downstream error"); - if (!u->cacheable && u->peer.connection) { + if (!u->cacheable && !u->store && u->peer.connection) { ngx_http_upstream_finalize_request(r, u, 0); } } |