How to make a named location in subrequest

Hi,

Previously, I wrote a module to make a subrequest to backend. nginx.conf
like that:

location /file {
nphase_uri /dummy;
nphase_set_uri_var $np_uri http://backend;
}

location /dummy {
proxy_pass $np_uri;
}

The module could send original URI “http://localhost/file/abcd.txt” to
backend to process.
And the module could get response from backend and decide to continue or
refuse.

But now This fix disabled sending original URI to backend.

*) Bugfix: a "proxy_pass" directive without URI part might use

original
request after redirection with the “try_files” directive.

If we need to send same request to backend, we must use named location.
But it
seems that named location is not support in subrequest. The named
location only
processed in try_files phase.

Following configuration would not work, for the subrequest send a
request “GET /dummy”
rather than original URI.

location /dummy {
try_files /dummy @named;
}
location @named {
proxy_pass $np_uri;
}

So how do I make it work?

Posted at Nginx Forum:

Hello!

On Thu, Jan 19, 2012 at 07:24:29AM -0500, bigplum wrote:

location /dummy {
*) Bugfix: a “proxy_pass” directive without URI part might use
request “GET /dummy”
rather than original URI.

location /dummy {
try_files /dummy @named;
}
location @named {
proxy_pass $np_uri;
}

So how do I make it work?

You may explicitly specify URI you want to use in a request to
backend, i.e.

location /dummy {
    proxy_pass $np_uri$request_uri;
}

Maxim D.

Thanks to Maxim D…

Finally I modify the module. Cat the URI string to $np_uri, make $np_uri
like that http://backend/filename.ext.

Posted at Nginx Forum:

The r->unparsed_uri has been used to cat.

Posted at Nginx Forum: