Trying to get something like proxypassreverse going

Hey all.

I am trying to get proxy a certain path in my domain to a different
back end than the “normal” paths. So far I have done this. I got all
this information from various sites on the web and it almost works.

proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
client_header_buffer_size 64k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 16k;
proxy_buffers 32 16k;
proxy_busy_buffers_size 64k;

proxy_pass_header Set-Cookie;
proxy_pass_header P3P;

server {
listen 80;
server_name my.server.com;
location / {
proxy_pass http://localhost:3001;
}
location /foo/ {
proxy_pass http://localhost:3000/;
}
}

This works except that some sort of a rewrite rule is required because
the links form that back end are broken. For example when the backend
links to /images/blah or /stylesheets/blah the browser thinks the
images and the stylesheets come from the / root.

I would like the proxy to somehow rewrite those links to be
/foo/images/blah and /foo/stylesheets/blah.

I saw this link… http://wiki.nginx.org/NginxLikeApache but that does
not work at all.

Any help would be much appreciated.

Thanks in advance.

Hey guys I hate to bump my own post but…

I am still struggling to get this proxy going. I have followed example
after example on the web and nothing seems to work. I have also read
through the documentation on proxy_pass and proxy_redirect but I still
can’t make it work.

What I am trying to do is pretty simple I think and surely this is a
solved problem.

Here is the situation.

I have a rails site. Initially I was serving with passenger but I
changed it to a proxy because I thought maybe passenger was causing a
problem. I am now using nginx without the passenger module.

The main web site is being served from the backend http://localhost:3001
This part works great. I can go to my.server.com and I get the web site
I am expecting.

I want anything in the /foo path to be handled by backend
http://localhost:3000 This almost works. Then I browse
http://my.server.com/foo it sends the request to the proper backend but
the stylesheets, images etc don’t load. The reason is because the links
from the backend point to /stylesheets, /images etc and nginx is not
proxying these.

Somehow I need nginx to append /foo to /stylesheets when they come from
localhost:3000

According to the documantation the proxy redirect is supposed to do this
but I can’t find the magic incantation. The documentation says …

Let us suppose the proxied server returned line Location:
http://localhost:8000/two/some/uri/.

The directive

proxy_redirect http://localhost:8000/two/ http://frontend/one/;

will rewrite this line in the form Location:
http://frontend/one/some/uri/.

In the replaceable line it is possible not to indicate the name of the
server:

proxy_redirect http://localhost:8000/two/ /;

then the basic name of server and port is set, if it is different from
80.

I tried this but I still can’t make it work.

Surely there is an easy way to this pretty simple thing.

Posted at Nginx Forum: