<div dir="ltr">Thanks, I've reset subrequest's variables and it's ok now.<div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, May 3, 2013 at 7:26 AM, lanshun zhou <span dir="ltr"><<a href="mailto:zls.sogou@gmail.com" target="_blank">zls.sogou@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>You can either use separated variables between the main request and subrequests by creating new ones for subrequest after calling ngx_http_subrequest, or mark variable "$proxy_internal_body_length" as no_cacheable.<br>

</div><div><br></div><div>See <a href="http://mailman.nginx.org/pipermail/nginx-devel/2013-May/003669.html" target="_blank">http://mailman.nginx.org/pipermail/nginx-devel/2013-May/003669.html</a> for more details.</div><div class="gmail_extra">

<br><br><div class="gmail_quote">2013/5/2 Marat Dakota <span dir="ltr"><<a href="mailto:dakota@brokenpipe.ru" target="_blank">dakota@brokenpipe.ru</a>></span><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div><div class="h5">
<div dir="ltr">Hi.<div><br></div><div>My module makes a few subrequests with body (I populate sr->request_body and set Content-Length in sr-headers_in).</div><div><br></div><div>These subrequests are landing to a locations that look like:</div>


<div><div><br></div><div>    location /backend {</div><div>        internal;</div><div>        rewrite /backend(.+) $1 break;</div><div>        proxy_pass <a href="http://mybackend" target="_blank">http://mybackend</a>;<br>

</div><div>
    }</div><div><br></div><div><div>    location /backend2 {</div><div>        internal;</div><div>        rewrite /backend2(.+) $1 break;</div><div>        proxy_pass <a href="http://mybackend2" target="_blank">http://mybackend2</a>;<br>


</div><div>    }</div></div><div><br></div><div>The problem is that proxy_pass takes Content-Length from the first subrequest and uses it for the second subrequest. So, when the first subrequest is longer than the second one, the second one never ends, and when the first one is shorter, the second backend (mybackend2) receives incomplete body.</div>


<div><br></div><div>I've spent quite a time tracing the problem and for the moment I've figured out that Content-Length comes from these lines in ngx_http_proxy_module.c:</div><div><br></div><div>
<div>        while (*(uintptr_t *) e.ip) {</div><div>            code = *(ngx_http_script_code_pt *) e.ip;</div><div>            code((ngx_http_script_engine_t *) &e);</div><div>        }</div><div><br></div><div>
I haven't managed to go deeper at the moment.</div><div><br></div><div>So, question is — am I doing something wrong or is it a bug?</div><div><br></div><div>Thanks.</div><div><br></div><div>
--</div><div>Marat</div></div></div></div>
<br></div></div>_______________________________________________<br>
nginx-devel mailing list<br>
<a href="mailto:nginx-devel@nginx.org" target="_blank">nginx-devel@nginx.org</a><br>
<a href="http://mailman.nginx.org/mailman/listinfo/nginx-devel" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx-devel</a><br></blockquote></div><br></div></div>
<br>_______________________________________________<br>
nginx-devel mailing list<br>
<a href="mailto:nginx-devel@nginx.org">nginx-devel@nginx.org</a><br>
<a href="http://mailman.nginx.org/mailman/listinfo/nginx-devel" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx-devel</a><br></blockquote></div><br></div></div>