diff --git a/backend/templates/_location.conf b/backend/templates/_location.conf index 2ee0d31bb..dec486c4e 100644 --- a/backend/templates/_location.conf +++ b/backend/templates/_location.conf @@ -1,10 +1,39 @@ location {{ path }} { + set $forward_scheme {{ forward_scheme }}; + set $forward_host {{ forward_host }}; + set $forward_port {{ forward_port }}; + proxy_set_header Host $host; proxy_set_header X-Forwarded-Scheme $scheme; 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 / so the regex match will exclude that slash from the match, + # but forward path doesn't, so we must 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. + # If both do, then we need to capture $uri_remainder without a leading /, but if neither do, + # then we need to capture $uri_remainder with a leading slash (if it has one - it could just be some GET parameters). + # The code for both scenarios happens to be the same. + 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" %} @@ -18,7 +47,6 @@ proxy_http_version 1.1; {% endif %} - {{ advanced_config }} } diff --git a/frontend/js/app/nginx/proxy/location-item.ejs b/frontend/js/app/nginx/proxy/location-item.ejs index 39445f7be..22e066c13 100644 --- a/frontend/js/app/nginx/proxy/location-item.ejs +++ b/frontend/js/app/nginx/proxy/location-item.ejs @@ -51,6 +51,12 @@
+

<%- i18n('all-hosts', 'advanced-config-var-headline') %>

+