[BUG] Wrong Content-Length shared between main request and subrequests in http proxy module

Maxim Dounin mdounin at mdounin.ru
Sat May 11 17:28:50 UTC 2013


Hello!

On Fri, May 03, 2013 at 11:20:46AM +0800, lanshun zhou wrote:

> Nginx uses a variable "$proxy_internal_body_length" for the
> "Content-Length" header in http proxy module, which is cacheable and shared
> between the main request and all subrequests by default.
> Although ctx->internal_body_length is calculated for each
> request/subrequest, the string format is cached after the first generation,
> and this may be wrong for other subrequests.
> 
> The following simple config can reproduce the problem, where xxxxx is a
> place that can receive post data. curl --data-binary "xxxxxxxxxxxxxxx"
> localhost/test.html will cause the client hang.
> 
>       location = /test.html {
>         add_after_body /vpost;
> 
>         proxy_pass http://xxxxx;
>       }
> 
>       location /vpost {
>         proxy_set_body "in vpost";
> 
>         proxy_pass http://xxxxx;
>       }

Patch committed, thanks.  Added tests, too.

http://hg.nginx.org/nginx/rev/bfb99b75833b
http://hg.nginx.org/nginx-tests/rev/36d24870ccb2

-- 
Maxim Dounin
http://nginx.org/en/donation.html



More information about the nginx-devel mailing list