Mercurial > hg > nginx
changeset 7232:a7ed15573ae9
Upstream: u->conf->preserve_output flag.
The flag can be used to continue sending request body even after we've
got a response from the backend. In particular, this is needed for gRPC
proxying of bidirectional streaming RPCs, and also to send control frames
in other forms of RPCs.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Sat, 17 Mar 2018 23:04:23 +0300 |
parents | 22f7bdbd96d3 |
children | 2713b2dbf5bb |
files | src/http/ngx_http_upstream.c src/http/ngx_http_upstream.h |
diffstat | 2 files changed, 5 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/http/ngx_http_upstream.c Sat Mar 17 23:04:22 2018 +0300 +++ b/src/http/ngx_http_upstream.c Sat Mar 17 23:04:23 2018 +0300 @@ -2031,7 +2031,9 @@ c->tcp_nopush = NGX_TCP_NOPUSH_UNSET; } - u->write_event_handler = ngx_http_upstream_dummy_handler; + if (!u->conf->preserve_output) { + u->write_event_handler = ngx_http_upstream_dummy_handler; + } if (ngx_handle_write_event(c->write, 0) != NGX_OK) { ngx_http_upstream_finalize_request(r, u, @@ -2193,7 +2195,7 @@ #endif - if (u->header_sent) { + if (u->header_sent && !u->conf->preserve_output) { u->write_event_handler = ngx_http_upstream_dummy_handler; (void) ngx_handle_write_event(c->write, 0);
--- a/src/http/ngx_http_upstream.h Sat Mar 17 23:04:22 2018 +0300 +++ b/src/http/ngx_http_upstream.h Sat Mar 17 23:04:23 2018 +0300 @@ -223,6 +223,7 @@ unsigned intercept_404:1; unsigned change_buffering:1; unsigned pass_trailers:1; + unsigned preserve_output:1; #if (NGX_HTTP_SSL || NGX_COMPAT) ngx_ssl_t *ssl;