proxy_pass takes Content-Length from another subrequest
Marat Dakota
dakota at brokenpipe.ru
Fri May 3 21:29:41 UTC 2013
Thanks, I've reset subrequest's variables and it's ok now.
On Fri, May 3, 2013 at 7:26 AM, lanshun zhou <zls.sogou at gmail.com> wrote:
> 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.
>
> See http://mailman.nginx.org/pipermail/nginx-devel/2013-May/003669.html for
> more details.
>
>
> 2013/5/2 Marat Dakota <dakota at brokenpipe.ru>
>
>> Hi.
>>
>> My module makes a few subrequests with body (I populate sr->request_body
>> and set Content-Length in sr-headers_in).
>>
>> These subrequests are landing to a locations that look like:
>>
>> location /backend {
>> internal;
>> rewrite /backend(.+) $1 break;
>> proxy_pass http://mybackend;
>> }
>>
>> location /backend2 {
>> internal;
>> rewrite /backend2(.+) $1 break;
>> proxy_pass http://mybackend2;
>> }
>>
>> 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.
>>
>> 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:
>>
>> while (*(uintptr_t *) e.ip) {
>> code = *(ngx_http_script_code_pt *) e.ip;
>> code((ngx_http_script_engine_t *) &e);
>> }
>>
>> I haven't managed to go deeper at the moment.
>>
>> So, question is — am I doing something wrong or is it a bug?
>>
>> Thanks.
>>
>> --
>> Marat
>>
>> _______________________________________________
>> nginx-devel mailing list
>> nginx-devel at nginx.org
>> http://mailman.nginx.org/mailman/listinfo/nginx-devel
>>
>
>
> _______________________________________________
> nginx-devel mailing list
> nginx-devel at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx-devel/attachments/20130504/3caebe1a/attachment.html>
More information about the nginx-devel
mailing list