How to combine try_files with multiple proxy destinations

rrrrcccc nginx-forum at nginx.us
Wed Jan 8 09:22:40 UTC 2014


I have the folllowing requirement:
1. if /usr/share/nginx/html/maintenance.html exists, then always show this
file to browser.
2. if this is the static file which located in the sub-directories of
/usr/share/nginx/html/, then show this static file to browser.
3. if the URI begins with /testapp1/, then proxy to http://127.0.0.1:8080;
else proxy to http://127.0.0.1:8081

And I tried the following two configurations but both failed:
1. Config1
server {
  ...
  root   /usr/share/nginx/html/;  
  location / {
    try_files /maintenance.html $uri @proxy;
  }

  location @proxy {
    location /testapp/ {
      proxy_pass http://127.0.0.1:8080;
    }
    
    location / {
      proxy_pass http://127.0.0.1:8081
    }
  }
}

2. Config2
server {
  ...
  root   /usr/share/nginx/html/;  
  try_files /maintenance.html $uri @proxy;

  location /testapp/ {
    proxy_pass http://127.0.0.1:8080;
  }
  
  location / {
    proxy_pass http://127.0.0.1:8081
  }
}

For Config1, it throws the following error:
nginx: [emerg] location "/testapp/" cannot be inside the named location
"@proxy" in /etc/nginx/nginx.conf:41

For Config2, it does not work as expected: it seems that when try_files is
together with location directives, try_file has the lowerest priority and so
I can never get /maintenance.html shown.

So can anybody know how to config to meet my requirement ? Thanks in
advance!

Posted at Nginx Forum: http://forum.nginx.org/read.php?2,246125,246125#msg-246125



More information about the nginx mailing list