Rewrite URI and pass request to the upstream server
Maxim Dounin
mdounin at mdounin.ru
Tue Mar 17 20:46:50 MSK 2009
Hello!
On Tue, Mar 17, 2009 at 10:19:58AM -0700, mike wrote:
> On Tue, Mar 17, 2009 at 10:09 AM, Ruben. D. <ruben.grunge84 at gmail.com> wrote:
> > Hi friends, I need rewrite and old URI and pass the request to the upstream
> > server, here is my current config file:
> > http://pastie.org/418871
> >
> > If for example I have http://pe.domain.com/xx-xxx-689 I need redirect to
> > http://cl.domain.com/xx-xxx-689 and let the upstream process the new
> > request, with my current config I've obtained the rewrite of the URI but
> > nginx return me a 404 error, therefore it is not transfering the request to
> > the upstream server because the 404 error page are different between nginx
> > and my application.
>
> This is a wild shot but you might try
>
> - proxy_pass http://mongrel;
> + proxy_pass http://mongrel/;
>
> I've never used named upstream locations but the ending slash does
> have a different effect when passing HTTP to a backend. I believe it
> maintains the /uri/ request as is, instead of winding up being
> /uri/uri duplicated (I think is the easiest way to explain it?)
No.
Form of proxy_pass with uri component (proxy_pass http://mongrel/)
changes matched location prefix to this uri component. So, for
location /blah/ {
proxy_pass http://backend/boom/;
}
and request "/blah/something" your backend will see
"/boom/something".
Without uri component (proxy_pass http://mongrel) uri will be
transfered to backend as is, i.e. for
location /blah/ {
proxy_pass http://backend;
}
and request "/blah/something" your backend will see
"/blah/something".
For location / as you may see from the above form doesn't matter,
and
proxy_pass http://mongrel;
proxy_pass http://mongrel/;
are equivalent (while the second one will eat a bit more CPU).
Maxim Dounin
More information about the nginx
mailing list