zestyregnum
Novice
I'm setting up nginx as a reverse proxy for squaremap (a world map viewer for Minecraft servers) and encountering unexpected behaviour with trailing slashes. I've followed the squaremap documentation for serving with nginx acting as a reverse proxy (https://github.com/jpenilla/squaremap/wiki/Internal-vs-External-Web-Server), but I'm confused by the results. Here's what I've tried:
squaremap is running at
Configuration:
1.
Result: Accessing
2.
Result:
3.
Result:
In my attempt to figure out what was happening, I read part of the nginx documentation on
Based on this, I created a table of what I think is happening in each of the above cases:
My questions are:
I'd appreciate any insights into understanding this behaviour and how to properly configure nginx for this use case.
squaremap is running at
127.0.0.1:39000
Configuration:
1.
Code:
location /squaremap {
proxy_pass http://127.0.0.1:39000;
}
Result: Accessing
https://example.com/squaremap
returns a 404 error.2.
Code:
location /squaremap {
proxy_pass http://127.0.0.1:39000/;
}
Result:
https://example.com/squaremap
shows a blank page, but https://example.com/squaremap/
works fine.3.
Code:
location /squaremap/ {
proxy_pass http://127.0.0.1:39000/;
}
Result:
https://example.com/squaremap
redirects to https://example.com/squaremap/
and then displays the web interface.https://example.com/squaremap/
works as expected.In my attempt to figure out what was happening, I read part of the nginx documentation on
proxy_pass
. However, I'm not sure if my interpretation is correct. My understanding is:- If there's no URI in the
proxy_pass
directive, the request URI is passed to the upstream unchanged. - If there is a URI in the
proxy_pass
directive, the part of the request matching the location directive is substituted by the value of the URI in theproxy_pass
directive.
Based on this, I created a table of what I think is happening in each of the above cases:
Case | Original Request | Request to Upstream | Result |
1 | https://example.org/squaremap | /squaremap | Error 404 |
2.a | https://example.org/squaremap | / | White page |
2.b | https://example.org/squaremap/ | // | Works |
3 | https://example.org/squaremap/ | / | Works |
My questions are:
- Is my interpretation of how nginx processes these requests correct?
- Why do I get different results in cases
2a
and3
, even though they seem to send the same request to the upstream? - Why doesn't it work without the trailing slash, but works with it?
- Is there a configuration that would allow both
/squaremap
and/squaremap/
to work correctly without a redirect?
I'd appreciate any insights into understanding this behaviour and how to properly configure nginx for this use case.
Last edited: