Internal redirects to upstream


#1

Is it possible to do an internal redirect to another url within nginx?

Say I access url “/u1” which is handled by an upstream server. I need to
be able to return a redirect to url “/u2” which is not a file but needs
to be sent back to the upstream server (possibly different from the
first one).

X-Accel-Redirect seems to be for cases when /u2 maps to a file.


#2

Hello!

On Wed, May 06, 2009 at 11:54:50PM +0530, Arvind Jayaprakash wrote:

Is it possible to do an internal redirect to another url within nginx?

Say I access url “/u1” which is handled by an upstream server. I need to
be able to return a redirect to url “/u2” which is not a file but needs
to be sent back to the upstream server (possibly different from the
first one).

X-Accel-Redirect seems to be for cases when /u2 maps to a file.

No, X-Accel-Redirect just accepts uri and does internal redirect.
It has no knowledge of how /u2 will be handled - by static module,
proxy module, fastcgi or whatever.

Maxim D.


#3

On May 06, Maxim D. wrote:

X-Accel-Redirect seems to be for cases when /u2 maps to a file.

No, X-Accel-Redirect just accepts uri and does internal redirect.
It has no knowledge of how /u2 will be handled - by static module,
proxy module, fastcgi or whatever.

Excellent.

Can any response headers sent by /u1 be transferred as request headers
when making the request to /u2 ?


#4

Hello!

On Thu, May 07, 2009 at 01:19:28AM +0530, Arvind Jayaprakash wrote:

first one).
when making the request to /u2 ?
Any upstream response headers are available as $upstream_http_*.
But they will be cleared as soon as upstream module in /u2 will
start working, so you have to save them somewhere at rewrite
phase, e.g.:

location /u2 {
    set $v $upstream_http_x_my_header;
    proxy_set_header X-My-Header $v;
    proxy_pass ...
}

Maxim D.