问题标签 [netflix-zuul]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
4258 浏览

spring-boot - 如何避免使用 Zuul 重定向到另一个主机?

我尝试使用 Zuul,这是 Spring Cloud Netflix 中使用的反向代理。我从 spring 博客上的教程开始了一个项目(https://spring.io/blog/2015/02/03/sso-with-oauth2-angular-js-and-spring-security-part-v

但是我不确定我是否正确理解了 Zuul 的角色。

如果我转到 localhost:8080/login,我认为 Zuul 会代理我的请求,以便我留在 localhost:8080 但我得到了 302 重定向到 localhost:9999/uaa/login。

zuul路由配置如下:

zuul: routes: resource: path: /resource/** url: http://localhost:9000/resource login: path: /login/** url: http://localhost:9999/uaa/login user: path: /user/** url: http://localhost:9999/uaa/user auth: path: /auth/** url: http://localhost:9999/uaa/

是否有可能始终留在 localhost:8080 上(我认为 Zuul 应该这样做)?

完整的项目在 github 上可用,因此可以在本地运行它:https ://github.com/hlassiege/oauth-social-zuul

0 投票
0 回答
3633 浏览

spring-boot - 带有 Eureka、Oauth2 和 zuul 的 Spring Cloud

我正在尝试配置示例https://github.com/dsyer/spring-security-angular/tree/master/oauth2/ui以将 eureka 用于 userAuthorizationUri 部分,但到目前为止没有运气。我的 oauth2 服务器是通过 eureka 注册的

0 投票
2 回答
8510 浏览

spring-cloud - 为什么 ZUUL 强制 SEMAPHORE 隔离来执行其 Hystrix 命令?

我注意到 Spring-Cloud ZUUL 将执行隔离强制为 SEMAPHORE 而不是 THREAD 默认值(如 Netflix 推荐的那样)。

中的一条评论org.springframework.cloud.netflix.zuul.filters.route.RibbonCommand说:

我们希望默认为 semaphore-isolation,因为它包含了另外 2 个已经被线程隔离的命令

但是我还是不明白:-(另外两个命令是什么?

以这种方式配置,Zuul 只能调度负载,但不允许超时并让客户端走开。简而言之,即使 Hystrix 超时设置为 1000 毫秒,客户端也只会在转发到链下服务的调用返回(或由于 ReadTimeout 导致超时)后才被释放。

我试图通过覆盖配置来强制线程隔离(不幸的是,每个服务,因为默认值是在代码中强制执行的)并且一切似乎都按预期工作。但是,如果没有正确理解其中的含义,我并不热衷于这样做——当然是关于代码中的注释和 Zuul 的 Spring Cloud 版本采用的默认值。

有人可以提供更多信息吗?谢谢

0 投票
2 回答
4529 浏览

docker - 尽管有 docker 容器的随机外部端口,但仍使用 Eureka

我正在编写一个应用程序,它由几个基于 Spring Boot 的微服务组成,前端有一个基于 zuul 的反向代理 -

当我在我的机器上启动服务时它可以工作,但是对于服务器部署,我想使用 docker 来提供服务,但这似乎现在不可能。

通常你会在容器外部有一个固定的“内部”端口和随机端口。但是容器中的应用程序不知道外部端口(和 IP)。

Netflix 工具与我想要编写高效的微服务架构相匹配,并且在概念上我真的很喜欢 docker。据我所知,启动容器会很麻烦,收集主机上的外部端口并将其传递给应用程序,因为您不能在应用程序启动后简单地更改端口。

有什么方法可以将 eureka 与基于 docker 的客户端一起使用?

[更新] 我想我在解释问题方面做得很差。所以也许这更澄清了一点:

eureka 服务器本身可以在 docker 中运行,因为我只有一个,外部端口无所谓。我可以使用链接功能从客户端访问它。

问题是客户端注册自己的 URL。例如https://localhost:8080/但由于动态端口分配,它实际上只能通过https://localhost:54321/访问

所以 eureka 会为服务返回错误的 URL。

更新 我在下面更新了我的答案,所以看看那里。

0 投票
1 回答
3074 浏览

spring-cloud - 为我的 zuul 应用程序替换 RibbonRoutingFilter

我想将RibbonRoutingFilterzuul 包中嵌入的现有包替换为具有附加特性/自定义的自定义包。

是否只是创建我自己的并赋予它优先于内置优先级触发的情况?我不希望这被调用两次。

实际上,为了澄清最后一点,我希望我的版本取代内置版本。我创建了 的副本RibbonRoutingFilter,添加了我的自定义设置,它按我想要的方式工作,但RibbonRoutingFilter也调用了原始版本。我该如何抑制它或者这可能。

建议?提前致谢

0 投票
0 回答
355 浏览

angularjs - 没有 Zuul 的 SpringBoot + OAuth2

我目前正在构建一个由三个主要部分组成的 SpringBoot 应用程序:

  1. 前端服务器(对于我使用 AngularJS 的前端应用程序)
  2. 身份验证服务器(我使用 OAuth2 进行身份验证)
  3. 资源服务器(为前端提供 RESTServices)

我已经找到了一个非常有用的教程,对我来说效果很好。但我想知道是否有办法在前端省略 Zuul 代理?我想直接从我的前端 angularJS 应用程序中调用资源端点'localhost:9000/resource'。

我已经向我的资源服务器添加了一个 CORSFilter(对于这一步,我使用了本教程

但是当我从我的 AngularJS 应用程序中发送请求时,资源服务器会响应 HTTP 401 错误,尽管我已经通过身份验证服务器进行了身份验证。

我已经尝试使用 Fiddler 分析浏览器和提供 RESTService 的服务器之间的通信。通过这样做,我发现我的 AngularJS 应用程序没有在请求标头中发送任何会话 ID。

你有什么想法,我可以在哪里继续寻找我的问题的解决方案?

亲切的问候,弗洛里安

0 投票
2 回答
22224 浏览

java - Spring Cloud Zuul Proxy 背后的 Spring OAuth 授权服务器

我目前正在开发基于微服务架构的应用程序。我们使用使用 Spring Cloud Netfix 的 Zuul 服务器实现的 API-Gateway 将请求路由到我们的微服务。

为了实现我们所有服务的单点登录,我目前正在使用 Spring Cloud Security 设置 OAuth2 服务器。服务器基本上只是 Dave Syer 的回购中实现的副本和过去:https ://github.com/dsyer/spring-security-angular/tree/master/oauth2/authserver

主要区别在于我想通过 Zuul 代理将请求路由到我的 OAuth 服务器。这样我就不必直接公开我的 OAuth 服务器,并且可以动态添加和删除登录服务器。

问题是我不了解如何正确配置此设置。当我尝试访问 OAuth 服务器上的受保护资源时,我被转发到登录页面。这当然是意料之中的。但我不知道如何设置转发时使用的主机名和端口。我想要发生的是服务器转发到 Zuul 服务器上的端点,该端点将被代理回 OAuth 服务器。(Zuul API-Gateway 应该是客户端曾经与之交谈的唯一服务器。其他所有内容都将被隐藏。)

因为它是从HttpServletRequestin读取主机和端口LoginUrlAuthenticationEntryPoint。但是服务器看到的请求是Zuul代理发送的请求。所以我被转发到一个内部 IP 而不是代理上的端点。

我试图将登录页面的 URL 设置WebSecurityConfigurerAdapter.configure(HttpSecurity)为我的 Zuul 代理的绝对 URL。但这只是导致我的应用程序抱怨重定向太多。(可能在那里造成了循环。)

设置它的最佳方法是什么?

0 投票
1 回答
2590 浏览

filter - 如何将修改/包装的 HTTPServletRequest 传递给后续的 Zuul 过滤器?

我们有一个 Zuul Pre-Filter (Filter1),它将检查传入的 HTTPServletRequest 并对其中的查询参数进行一些更改,以将其嵌入到自定义创建的请求中(包装 HttpServletRequestWrapper)。

现在,我想将此自定义包装请求传递给下一个 Zuul Pre-Filter (Filter2)。我怎样才能做到这一点 ?

之前在使用常规 Servlet 过滤器时,我们在我的 Filter1 中使用如下

但是,在 Zuul 过滤器中,Zuul 框架负责调用后续过滤器并传递请求/响应对象。我怎样才能覆盖它?

0 投票
1 回答
482 浏览

spring-cloud - 升级到 Spring cloud 1.0.1 zuul url 编码参数不起作用

我们使用 zuul 作为网关将传入的请求分派给服务。

当我们从 1.0.0 升级时,我们注意到两个问题,其中一个我们得到了解决方法。

第二个问题是,在某些传入的 uris 中已编码处理请求中的特殊字符,例如 ....rovi//45846 需要更改为 rovi%2F%2F45846 才能传入。

所以对于像下面这样的休息 URI POST http://localhost:8902/contentservice/content/subscriptionPackages/624460160/channels/rovi%252F%252F45846

如果我直接向服务提出这个请求,它就可以正常工作。但是,如果我通过 zuul 将其路由为 POST http://localhost:8765/contentservice/content/subscriptionPackages/624460160/channels/rovi%252F%252F45846,那么它就会消失。

现在,如果我将 % 取出,当我逐步通过内容服务前端控制器(当然)时,它会被传入并被视为内容服务中的错误。

zuul 功能中 spring cloud 1.0.0 到 1.0.1 之间发生了哪些变化,以阻止其工作。因为它肯定在 1.0.0 中工作。

0 投票
2 回答
2721 浏览

spring-boot - 将基于内部尤里卡的链接重写为zuul代理中的外部链接

我正在使用 spring-boot 服务编写一个基于微服务的应用程序。

对于通信,我使用 REST(带有 hatoas 链接)。每个服务都向 eureka 注册,所以我提供的链接都是基于这些名称的,以便功能区增强的 resttemplates 可以使用堆栈的负载平衡和故障转移功能。

这适用于内部通信,但我有一个单页管理应用程序,它通过基于 zuul 的反向代理访问服务。当链接使用真实的主机名和端口时,链接被正确重写以匹配从外部可见的 url。这当然不适用于我在内部需要的符号链接......

所以在内部我有如下链接:

zuul 代理应该将其重写为

我在 zuul 中或沿途的某个地方缺少什么可以使这更容易的东西吗?

现在我正在考虑如何可靠地自己重写网址而不会造成附带损害。

应该有更简单的方法吧?