当应用程序服务器位于 api 网关和负载平衡器后面时确定原始请求 url
determine original request url when application server ist behind api-gateway and load-balancer
我有一个 tomcat 应用程序服务器,我需要来源 url,客户端调用以便为另一个资源发回 link。然而 URL 被 api-gateway 以及 api-gateway 之后的负载均衡器重新映射。
调用 requestContext.getUriInfo().getRequestUri()
时,我得到了无法从外部访问的应用程序服务器的内部 uri。
有没有办法获取名为 url 的原件?
重写 URL 的体面的网关或负载均衡器通常将原始 URL 的(部分)放入请求 header 中。具体哪个请求 header 名称取决于所使用的确切网关 and/or 负载均衡器,因为它还没有明确的标准(还没有?)。通常查阅其文档应该会提供线索,或者至少手动检查示例请求的 headers,如下所示:
List<String> headerNames = Collections.list(request.getHeaderNames());
for (String headerName : headerNames) {
List<String> headerValues = Collections.list(request.getHeaders(headerName));
System.out.println(headerName + " = " + headerValues);
}
根据评论,您已经发现它是 X-Replaced-Path
和 X-Forwarded-Host
。
我有一个 tomcat 应用程序服务器,我需要来源 url,客户端调用以便为另一个资源发回 link。然而 URL 被 api-gateway 以及 api-gateway 之后的负载均衡器重新映射。
调用 requestContext.getUriInfo().getRequestUri()
时,我得到了无法从外部访问的应用程序服务器的内部 uri。
有没有办法获取名为 url 的原件?
重写 URL 的体面的网关或负载均衡器通常将原始 URL 的(部分)放入请求 header 中。具体哪个请求 header 名称取决于所使用的确切网关 and/or 负载均衡器,因为它还没有明确的标准(还没有?)。通常查阅其文档应该会提供线索,或者至少手动检查示例请求的 headers,如下所示:
List<String> headerNames = Collections.list(request.getHeaderNames());
for (String headerName : headerNames) {
List<String> headerValues = Collections.list(request.getHeaders(headerName));
System.out.println(headerName + " = " + headerValues);
}
根据评论,您已经发现它是 X-Replaced-Path
和 X-Forwarded-Host
。