Repository: knox Updated Branches: refs/heads/v0.5.1 49c0083b8 -> efc27089e
KNOX-464: Location headers have wrong hostname when used behind load balancer Project: http://git-wip-us.apache.org/repos/asf/knox/repo Commit: http://git-wip-us.apache.org/repos/asf/knox/commit/9aa5ee4d Tree: http://git-wip-us.apache.org/repos/asf/knox/tree/9aa5ee4d Diff: http://git-wip-us.apache.org/repos/asf/knox/diff/9aa5ee4d Branch: refs/heads/v0.5.1 Commit: 9aa5ee4d778032ce2c1ec258d4bc89d1b7ee2a55 Parents: 49c0083 Author: Kevin Minder <kevin.min...@hortonworks.com> Authored: Fri Oct 31 13:10:47 2014 -0400 Committer: Larry McCay <lmc...@hortonworks.com> Committed: Fri Nov 21 15:58:04 2014 -0500 ---------------------------------------------------------------------- .../filter/rewrite/impl/UrlRewriteResponse.java | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/knox/blob/9aa5ee4d/gateway-provider-rewrite/src/main/java/org/apache/hadoop/gateway/filter/rewrite/impl/UrlRewriteResponse.java ---------------------------------------------------------------------- diff --git a/gateway-provider-rewrite/src/main/java/org/apache/hadoop/gateway/filter/rewrite/impl/UrlRewriteResponse.java b/gateway-provider-rewrite/src/main/java/org/apache/hadoop/gateway/filter/rewrite/impl/UrlRewriteResponse.java index 05795cb..00eea7b 100644 --- a/gateway-provider-rewrite/src/main/java/org/apache/hadoop/gateway/filter/rewrite/impl/UrlRewriteResponse.java +++ b/gateway-provider-rewrite/src/main/java/org/apache/hadoop/gateway/filter/rewrite/impl/UrlRewriteResponse.java @@ -40,7 +40,9 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.net.InetAddress; import java.net.URISyntaxException; +import java.net.UnknownHostException; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; @@ -175,11 +177,25 @@ public class UrlRewriteResponse extends GatewayResponseWrapper implements Params } } + // KNOX-464: Doing this because Jetty only returns the string version of the IP address for request.getLocalName(). + // Hopefully the local hostname will be cached so this will not be a significant performance hit. + // Previously this was an inline request.getServerName() but this ended up mixing the hostname from the Host header + // and the local port which was making load balancer configuration difficult if not impossible. + private String getRequestLocalHostName() { + String hostName = request.getLocalName(); + try { + hostName = InetAddress.getByName( hostName ).getHostName(); + } catch( UnknownHostException e ) { + // Ignore it and use the original hostname. + } + return hostName; + } + private String getGatewayParam( String name ) { if( "url".equals( name ) ) { - return request.getScheme() + "://" + request.getServerName() + ":" + request.getLocalPort() + request.getContextPath(); + return request.getScheme() + "://" + getRequestLocalHostName() + ":" + request.getLocalPort() + request.getContextPath(); } else if( "address".equals( name ) ) { - return request.getServerName() + ":" + request.getLocalPort(); + return getRequestLocalHostName() + ":" + request.getLocalPort(); } else if( "path".equals( name ) ) { return request.getContextPath(); } else {