Help with locations and regex
anon59682
nginx-forum at forum.nginx.org
Fri Oct 20 22:37:45 UTC 2017
Hi,
I'm trying to serve up static files for some paths and proxy_pass for others
and I can't figure it out.
=== Requirements ===
Location 1: the following paths should all load the requested file from
/home/user/project/dist/ and fall back to /home/user/project/dist/index.html
if the explicit filename was not found (ideally, without a redirect):
/admin
/admin/
/admin/favicon.ico
/admin/foo
/admin/foo/logo.png
etc. - basically, anything beginning with /admin/ or /admin itself (but not
/admin123)
Location 2: the root path should proxy_pass to a process running on another
port. This is separate from location 3 because it has different location
settings (such as auth).
Location 3: all first-level paths off the root should proxy_pass to the
process on the other port, for example:
/foo
/bar123
/foo/baz # this would NOT be proxy passed, it can just fall through and 404
or whatever
=== End of Requirements ===
So far, the closest I have come is a situation where location 2 and 3 are
working, but location 1 only partially works. In my current configuration
for location 1, it will accept anything beginning with /admin (including
/admin123) and it will 301 redirect /admin to /admin/ (note the trailing
slash). Here is that config:
server {
listen 80 default_server;
server_name my.domain;
root /home/user/project/dist;
index index.html;
# Location 1
location ^~ /admin {
alias /home/user/project/dist;
try_files $uri $uri/ /admin/index.html;
}
# Location 2
location = / {
# other stuff omitted for brevity
proxy_pass http://127.0.0.1:8080;
}
# Location 3
location ~ /([^\/]+)$ {
# other stuff omitted for brevity
proxy_pass http://127.0.0.1:8080;
}
}
I thought I should be able to use ^/admin(?:/.*)?$ for the location 1 match,
but that causes /admin/ to fall through to the default nginx 404 while
/admin and /admin/foo are caught by location 3. Using that new match and
changing the location modifier from ^~ to ~ catches everything correctly,
but then every location 1 request results in the following error:
rewrite or internal redirection cycle while internally redirecting to
"/admin/index.html"
I assume that's because I shouldn't be using alias and/or the try_files
directive is wrong when using that regex, but I haven't been able to find
the magic combination.
Is there any saint out there who knows how to satisfy all 3 requirements?
Thanks,
Anonymous Coward
Posted at Nginx Forum: https://forum.nginx.org/read.php?2,277012,277012#msg-277012
More information about the nginx
mailing list