4

私のドメインの証明書を持つAWS Elastic Load Balancerがあり、それはSSLトラフィックを終了します。 ELBは、httpsポートにリスナーを持ち、httpZuulに転送します。HTTPS/SSLを使用したAWS ELBの背後にあるZUUL

私はSpring Boot HATEOASを使用する場合、Zuulが正しいアドレスではなくhttp代わりのhttpsとのリンクを交換します:

"_links": { 
    "self": { 
    "href": "http://my.domain.com:80/rest/foo/bar" 
    } 
} 

しかし、私が欲しいのです:

"_links": { 
    "self": { 
    "href": "https://my.domain.com/rest/foo/bar" 
    } 
} 

これを生成し、要求応答はhttps

で行われます。ZuulはELBの後ろには、https経由でトラフィックを受け取るべきかどうかわからないと推測しています。

で暗号化されていないトラフィックを受信したにもかかわらず、Zuulhttpsのリンクを置き換える方法はありますか?

Zuulhttpsを配備する代わりに、自己署名証明書を使用することもできますが、可能であれば、この複雑な問題を取り除きたいと思います。

+0

はhttps://github.com/spring-を見ますcloud/spring-cloud-netflix/issues/1286 – phoenix7360

答えて

1

Zuulチームからの推薦に続いて、この問題はPreDecorationFilter(順番5)後に適用されるように、pre Zuulフィルタを追加することによって固定することができます。

new ZuulFilter() { 
     @Override 
     public String filterType() { 
      return "pre"; 
     } 

     @Override 
     public int filterOrder() { 
      return 6; //PreDecorationFilter=5 + 1 
     } 

     @Override 
     public boolean shouldFilter() { 
      return true; 
     } 

     @Override 
     public Object run() { 
      RequestContext ctx = RequestContext.getCurrentContext(); 
      log.info(String.format("Before filter ['%s': '%s', '%s': '%s']", 
        ZuulHeaders.X_FORWARDED_PROTO.toLowerCase(), 
        ctx.getZuulRequestHeaders().get(ZuulHeaders.X_FORWARDED_PROTO.toLowerCase()), 
        "X-Forwarded-Port", 
        ctx.getZuulRequestHeaders().get("x-forwarded-port"))); 


      final String originalXForwardedProto = ctx.getRequest().getHeader(ZuulHeaders.X_FORWARDED_PROTO.toLowerCase()); 
      final String originalXForwardedPort = ctx.getRequest().getHeader("x-forwarded-port"); 

      if (!StringUtils.isEmpty(originalXForwardedProto)) { 
       ctx.addZuulRequestHeader(ZuulHeaders.X_FORWARDED_PROTO.toLowerCase(), originalXForwardedProto); 
      } 

      if (!StringUtils.isEmpty(originalXForwardedPort)) { 
       ctx.addZuulRequestHeader("x-forwarded-port", originalXForwardedPort); 
      } 

      log.info(String.format("After filter ['%s': '%s', '%s': '%s']", 
        ZuulHeaders.X_FORWARDED_PROTO.toLowerCase(), 
        ctx.getZuulRequestHeaders().get(ZuulHeaders.X_FORWARDED_PROTO.toLowerCase()), 
        "X-Forwarded-Port", 
        ctx.getZuulRequestHeaders().get("x-forwarded-port"))); 

      return null; 
     } 
    }; 
} 
関連する問題