<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
</head>
<body>
<div>
<div>
<div>
<div style="direction: ltr;">Hi, Thank you for the explanation. I definitely need to learn more about the protocol spec. Would you help me understand why the "proxy_buffer_size" affects the result even when "proxy_buffering" is off?  </div>
<div><br>
</div>
<div style="direction: ltr;">Also, in my network topology, there are no other layer 7 hops. nginx is the only thing talks HTTP, and it is directly connecting to the backend server. I have also verified that, if I bypass nginx and directly connect to the TCP
 port, everything works just fine. So the chunks are not combined before they reach nginx.</div>
<div><br>
</div>
<div style="direction: ltr;">Thanks,</div>
<div style="direction: ltr;">Yuhao</div>
</div>
<div><br>
</div>
<div class="ms-outlook-ios-signature"></div>
</div>
<div> </div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="dir="ltr""><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> nginx <nginx-bounces@nginx.org> on behalf of Maxim Dounin <mdounin@mdounin.ru><br>
<b>Sent:</b> Monday, May 6, 2019 15:05<br>
<b>To:</b> nginx@nginx.org<br>
<b>Subject:</b> Re: Disabling proxy_buffering not working
<div> </div>
</font></div>
Hello! <br>
<br>
On Mon, May 06, 2019 at 07:08:44PM +0000, Yuhao Zhang wrote: <br>
<br>
> I am facing this issue where proxied server's response is <br>
> buffered before sending back to the request client, even when <br>
> proxy_buffering is disabled. <br>
> <br>
> I also tried setting "X-Accel-Buffering: no" header on the <br>
> response, but it didn't work. <br>
> <br>
> I posted the issue on ingress-nginx github repo, since It is <br>
> what I am using on Kubernetes. However, now I think the root <br>
> cause is in the underlying nginx. The ingress controller did its <br>
> job correctly, which is configuring nginx. <br>
> <br>
> The full story and a reproducible example can be found here: <br>
> https://github.com/kubernetes/ingress-nginx/issues/4063 <br>
> <br>
> The nginx version used by the controller is 1.15.6 <br>
<br>
>From the issue description it looks like you think that proxying <br>
with "proxy_buffering off;" should preserve HTTP transfer encoding <br>
chunks as received from the upstream server. It's not, chunk <br>
boundaries are not guaranteed to be preserved regardless of the <br>
buffering settings. Chunked transfer encoding is a property of a <br>
message as transferred between two HTTP entities, and can be <br>
modified by any HTTP intermediary. You should not assume it will <br>
be preserved. Quoting RFC 7230: <br>
<br>
Unlike Content-Encoding (Section 3.1.2.1 of [RFC7231]), <br>
Transfer-Encoding is a property of the message, not of the <br>
representation, and any recipient along the request/response chain <br>
MAY decode the received transfer coding(s) or apply additional <br>
transfer coding(s) to the message body, assuming that corresponding <br>
changes are made to the Transfer-Encoding field-value. Additional <br>
information about the encoding parameters can be provided by other <br>
header fields not defined by this specification. <br>
<br>
The "proxy_bufferring off;" means that nginx won't wait for the <br>
whole buffer to be filled before it will start sending the <br>
response to the client. But as long as nginx have more than one <br>
chunk received from the backend server, it will decode all the <br>
chunks and will send them to the client combined. <br>
<br>
-- <br>
Maxim Dounin <br>
http://mdounin.ru/ <br>
_______________________________________________ <br>
nginx mailing list <br>
nginx@nginx.org <br>
http://mailman.nginx.org/mailman/listinfo/nginx <br>
</div>
</body>
</html>