trailing slash at end URL with nginx as a reverse proxy for multiple website

António P. P. Almeida appa at perusio.net
Sun Nov 20 08:35:55 UTC 2011


On 20 Nov 2011 08h11 WET, nam.nh at nd24.net wrote:

> Hi,
>
> I'm running OpenIndiana 151a server then now I'd like to build the
> web service with nginx. Briefly, my scenario is: one central server
> installed a few website in virtual machines, and there is a
> different real machine that stores static contents. I want nginx in
> central server will be the reverse proxy (get idea from
> http://tumblr.intranation.com/post/766288369/using-nginx-reverse-proxy).
>
> For example, if someone open website a.com, it will be redirected to
> 10.0.0.2:8001, and if other go to b.com it will be redirected to
> 10.0.0.3:8001, etc ...
>
> server {
> listen       80;
> server_name  a.com;
>
> location / {
> proxy_pass         http://10.0.0.2:8001;
> proxy_redirect     off;
> server_name_in_redirect off;
> }
> }
>
> Nginx works fine, but I don't know how to rewrite/redirect the URL
> looks like: http://a.com/something becomes http://a.com/something/
>
> If someone open the link http://a.com/something nginx can't serve it
> then return the error message that says
> "http://a.com:8001/something" unreachable.
>
> If you have any advice, please tell. It's highly appreciated.

If it's rewriting all the URIs so that they have a trailing slash then
try this:

1. At the http level:

map $request_uri $no_trailing_slash {
  default  1;
  ~.*[^/]$ 0;
} 

2. At the server level (vhost):

server {
    listen       80;
    server_name  a.com;


    location / {
        if ($no_trailing_slash) {
            return 302 $request_uri/; 
        }

        proxy_pass         http://10.0.0.2:8001;
        proxy_redirect     off;
        server_name_in_redirect off;
    }
}
 
--- appa



> Thanks,



More information about the nginx mailing list