unparsed_uri setting in ngx_http_subrequest?
Maxim Dounin
mdounin at mdounin.ru
Sat Feb 27 14:17:08 MSK 2010
Hello!
On Fri, Feb 26, 2010 at 11:57:36AM -0800, Brian Pane wrote:
> In ngx_http_subrequest, the newly initialized subrequest's
> unparsed_uri is set to the same value as the parent request's
> unparsed_uri. (I'm looking at 0.8.33.)
This is believed to be right thing to do. Unparsed uri is one got
from client, and it shouldn't change on internal redirects and
subrequests.
> This interacts in a bad way with the proxy module. The proxy code
> that builds the request to the upstream, in ngx_http_proxy_eval, uses
> the subrequest's unparsed_uri, rather than its uri.
>
> The result is that, if a request for /prefix/foo creates a subrequest
> for /prefix/bar, and the server has been configured to proxy /prefix/*
> to some upstream, the subrequest will result in an upstream request
> for /prefix/foo (the same URI as the parent request) rather than
> /prefix/foo.
>
> Is that a bug, or is it the intended behavior?
It's (mis?)feature of proxy_pass used with variables. Until
0.8.25 it was required to construct full url there. In 0.8.25 it
was changed to use $request_uri if only hostname is given.
Most likely it should follow the same pattern as others when
working with r->unparsed_uri, i.e. don't use it unless it's valid
and don't use it in subrequests (see ngx_http_proxy_create_request()
for an example).
Maxim Dounin
More information about the nginx-devel
mailing list