Zuul反向代理保留URL

时间:2016-09-30 08:29:52

标签: nginx url-rewriting reverse-proxy jhipster netflix-zuul

我有一个微服务架构,使用JHipster构建了多个服务。

在一项服务中,我实施了一个zuul 路线过滤器。

public class TestZuulFilter extends ZuulFilter {

  @Override
  public String filterType() {
      return "route";
  }

  @Override
  public int filterOrder() {
    return 5;
  }

  @Override
  public boolean shouldFilter() {
      String requestUri = RequestContext.getCurrentContext().getRequest().getRequestURI();
      return "/serviceid/reverseproxy".equals(requestUri);
  }

  @Override
  public Object run() {

       // get url from id
       String id = ctx.getRequest().getParameter("id"); 
       Strign url = URLService.getURLFromId(id);

       try 
       {
          RequestContext ctx = RequestContext.getCurrentContext();

          // redirect
          ctx.setRouteHost(new URL(url));

       } catch(MalformedURLException ex) {}

       return null;
  }
}

当客户致电我的服务http://myservice/serviceid/reverseproxy?id=2 zuul将用户重定向(http 302状态)时,将用户转到ID为2的网址,在这种情况下为google.com。

如何从客户端保留原始请求网址?

网址必须保留http://myservice/serviceid/reverseproxy?url=2而不是http://www.google.com

提前致谢。

1 个答案:

答案 0 :(得分:1)

您似乎误解了重定向和代理的概念。

HTTP重定向意味着URL更改,因为所有工作都是由客户端完成的,最终通过发出2个请求调用(一个到您的代理,一个到外部服务)。

您想要的是将原始请求代理到外部服务(在您的示例中为google),这意味着您的过滤器应该是外部服务的客户端。这样,您的原始客户端只会在请求呼叫时进行,并且不知道它正在与您的外部服务进行通信。