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/ ;
  }
Falken
  • 1,682
  • 5
  • 18
  • 27

1 Answers1

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.

Christopher Perrin
  • 4,741
  • 17
  • 32
  • 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 '14 at 15:13
  • You are right. Either that, or you can use `alias` instead of `root` – Christopher Perrin Nov 26 '14 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.* – Mohammed Noureldin Jan 04 '18 at 23:26
  • @MohammedNoureldin it essentially means that it tries to match a prefix on a path and does not evaluate regular expressions. – Christopher Perrin Jan 04 '18 at 23:34
  • Actually my problem is with this word *prefix*: does it here mean the fix string (simple non-regex string)? – Mohammed Noureldin Jan 04 '18 at 23:36
  • 1
    @MohammedNoureldin it is the first part of the path that you want to use for the location. And yes it is without regex. – Christopher Perrin Jan 04 '18 at 23:45