diff --git a/backend/templates/_location.conf b/backend/templates/_location.conf index 63982f17..086d40ea 100644 --- a/backend/templates/_location.conf +++ b/backend/templates/_location.conf @@ -8,7 +8,27 @@ proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Real-IP $remote_addr; - proxy_pass $forward_scheme://$forward_host:$forward_port{{ forward_path }}; + + {% assign location_path_end_char = path | slice: -1 %} + {% assign forward_path_end_char = forward_path | slice: -1 %} + {% if location_path_end_char == "/" and forward_path_end_char != "/" %} + if ($request_uri ~ "{{ path }}(.*$)") { + # Location path ends with / but forward path doesn't, so we prefix $path_remainder with a slash. + set $uri_remainder /$1; + } + {% elsif location_path_end_char != "/" and forward_path_end_char == "/" %} + # Location path does not have a trailing / but forward path does, so we make sure to capture $uri_remainder without a leading slash. + if ($request_uri ~ "{{ path }}/(.*$)") { + set $uri_remainder $1; + } + {% else %} + # Either both location path and forward path have a trailing /, or neither do, so we make sure to capture $uri_remainder with a leading slash (if it has one). + if ($request_uri ~ "{{ path }}(.*$)") { + set $uri_remainder $1; + } + {% endif %} + + proxy_pass $forward_scheme://$forward_host:$forward_port{{ forward_path }}$uri_remainder; {% include "_access.conf" %} {% include "_assets.conf" %}