questions about upstream buffering mode

Eugaia ngx.eugaia at gmail.com
Sun Dec 12 09:20:05 MSK 2010


Hi,

On 12/12/2010 06:45, Wu Bingzheng wrote:
> hi all,
> There are 2 modes of upstream, buffering and non-buffering. And there 
> are some difference between them:
> 1. non-buffering mode doesn't support limit-rate.
> 2. a request in non-buffering mode decides the end of upstream by a) 
> close of upstream; b) comparing the length of recived data and 
> headers_out.content_length. While the request in buffering mode 
> decides the end only by the close of upstream. As a result, in 
> buffering mode, the upstream(such as a memcached cache) can't be 
> keepalive, which leads the request in nginx to end after keepalive-time.
> I want to know why does these difference exist?
> Can't the non-buffering mode support limit-rate?
The problem with this is that if you're supporting limit rate, what 
happens if you receive more data from the upstream than the limit rate 
would allow you to send to the client?  You'd have to buffer it (at 
least partially, either in memory or on disk). ;-)
> can't the buffering mode decide the end of request by content-length?
I personally can't immediately see a reason why not (but I'd be 
interested to know if there is one).  It's probably not there just 
because in most cases the connections to the upstreams won't fail, and 
so it's more efficient to not check the size when each packet is received.

Cheers,

Marcus.



More information about the nginx mailing list