13

On Apache you can ProxyPass everything except one or more subdirectories (with "!").

    ProxyPass /subdir !
    ProxyPass / http://localhost:9999/

What is the Nginx equivalent ?

My first guess is obviously not working :

 location /subdir {
      root /var/www/site/subdir;
  }

 location / {
      proxy_pass http://localhost:9999/ ;
  }

1 Answer 1

15

You can bind the proxy_pass to EXACTLY the path you like, like this

location = / {
    proxy_pass http://localhost:9999/;
}

This makes sure that no other path will be passed but /

OR

you can use this syntax for just the subdirectories to be matched

location ^~ /subdir {
     alias /var/www/site/subdir;
}

location / {
    proxy_pass http://localhost:9999/ ;
}

The ^~ matches the subdir and then stops searching so the / will not be executed. It is described here.

6
  • root /var/www/site/subdir should be root /var/www/site in my case, otherwise nginx will try to access /var/www/site/subdir/subdir .
    – Tinus
    Nov 26, 2014 at 15:13
  • You are right. Either that, or you can use alias instead of root Nov 26, 2014 at 15:35
  • 1
    Could you explain this ^~ more? I could not get what does it do. I tried reading the link you sent, but still cannot get it. If the longest matching prefix location has the “^~” modifier then regular expressions are not checked. Jan 4, 2018 at 23:26
  • @MohammedNoureldin it essentially means that it tries to match a prefix on a path and does not evaluate regular expressions. Jan 4, 2018 at 23:34
  • 1
    @MohammedNoureldin it is the first part of the path that you want to use for the location. And yes it is without regex. Jan 4, 2018 at 23:45

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .