# HG changeset patch # User Goffi # Date 1632845917 -7200 # Node ID fc91b78b71dbd4a1b58461561cdcb46533ea857c # Parent d62df81440c65ba8d4af3b691d9e54958e961ec8 server: handle "proxy" scheme in configuration diff -r d62df81440c6 -r fc91b78b71db libervia/server/proxy.py --- a/libervia/server/proxy.py Wed Sep 08 12:08:00 2021 +0200 +++ b/libervia/server/proxy.py Tue Sep 28 18:18:37 2021 +0200 @@ -52,7 +52,8 @@ ) def render(self, request): - # Forwarded and X-Forwarded-xxx headers can be set if we have behin an other proxy + # Forwarded and X-Forwarded-xxx headers can be set + # if we have behind an other proxy if ((not request.getHeader(C.H_FORWARDED) and not request.getHeader(C.H_X_FORWARDED_HOST))): forwarded_data = [] diff -r d62df81440c6 -r fc91b78b71db libervia/server/server.py --- a/libervia/server/server.py Wed Sep 08 12:08:00 2021 +0200 +++ b/libervia/server/server.py Tue Sep 28 18:18:37 2021 +0200 @@ -499,6 +499,28 @@ # normal redirection system is not used here continue + elif new_url.scheme == "proxy": + # a reverse proxy + host, port = new_url.hostname, new_url.port + if host is None or port is None: + raise ValueError( + "invalid host or port in proxy redirection, please check your " + "configuration: {new_url.geturl()}" + ) + url_prefix = (new_url.path or old).rstrip('/') + res = proxy.SatReverseProxyResource( + host, + port, + url_prefix.encode(), + ) + self.addResourceToPath(old, res) + log.info( + f"[{self.host_name}] Added redirection from /{old} to reverse proxy " + f"{new_url.netloc} with URL prefix {url_prefix}/" + ) + + # normal redirection system is not used here + continue else: raise NotImplementedError( "{scheme}: scheme is not managed for url_redirections_dict".format(