问题标签 [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.
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
spring-boot - 带有 Eureka、Oauth2 和 zuul 的 Spring Cloud
我正在尝试配置示例https://github.com/dsyer/spring-security-angular/tree/master/oauth2/ui以将 eureka 用于 userAuthorizationUri 部分,但到目前为止没有运气。我的 oauth2 服务器是通过 eureka 注册的
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 版本采用的默认值。
有人可以提供更多信息吗?谢谢
docker - 尽管有 docker 容器的随机外部端口,但仍使用 Eureka
我正在编写一个应用程序,它由几个基于 Spring Boot 的微服务组成,前端有一个基于 zuul 的反向代理 -
当我在我的机器上启动服务时它可以工作,但是对于服务器部署,我想使用 docker 来提供服务,但这似乎现在不可能。
通常你会在容器外部有一个固定的“内部”端口和随机端口。但是容器中的应用程序不知道外部端口(和 IP)。
Netflix 工具与我想要编写高效的微服务架构相匹配,并且在概念上我真的很喜欢 docker。据我所知,启动容器会很麻烦,收集主机上的外部端口并将其传递给应用程序,因为您不能在应用程序启动后简单地更改端口。
有什么方法可以将 eureka 与基于 docker 的客户端一起使用?
[更新] 我想我在解释问题方面做得很差。所以也许这更澄清了一点:
eureka 服务器本身可以在 docker 中运行,因为我只有一个,外部端口无所谓。我可以使用链接功能从客户端访问它。
问题是客户端注册自己的 URL。例如https://localhost:8080/但由于动态端口分配,它实际上只能通过https://localhost:54321/访问
所以 eureka 会为服务返回错误的 URL。
更新 我在下面更新了我的答案,所以看看那里。
spring-cloud - 为我的 zuul 应用程序替换 RibbonRoutingFilter
我想将RibbonRoutingFilter
zuul 包中嵌入的现有包替换为具有附加特性/自定义的自定义包。
是否只是创建我自己的并赋予它优先于内置优先级触发的情况?我不希望这被调用两次。
实际上,为了澄清最后一点,我希望我的版本取代内置版本。我创建了 的副本RibbonRoutingFilter
,添加了我的自定义设置,它按我想要的方式工作,但RibbonRoutingFilter
也调用了原始版本。我该如何抑制它或者这可能。
建议?提前致谢
angularjs - 没有 Zuul 的 SpringBoot + OAuth2
我目前正在构建一个由三个主要部分组成的 SpringBoot 应用程序:
- 前端服务器(对于我使用 AngularJS 的前端应用程序)
- 身份验证服务器(我使用 OAuth2 进行身份验证)
- 资源服务器(为前端提供 RESTServices)
我已经找到了一个非常有用的教程,对我来说效果很好。但我想知道是否有办法在前端省略 Zuul 代理?我想直接从我的前端 angularJS 应用程序中调用资源端点'localhost:9000/resource'。
我已经向我的资源服务器添加了一个 CORSFilter(对于这一步,我使用了本教程)
但是当我从我的 AngularJS 应用程序中发送请求时,资源服务器会响应 HTTP 401 错误,尽管我已经通过身份验证服务器进行了身份验证。
我已经尝试使用 Fiddler 分析浏览器和提供 RESTService 的服务器之间的通信。通过这样做,我发现我的 AngularJS 应用程序没有在请求标头中发送任何会话 ID。
你有什么想法,我可以在哪里继续寻找我的问题的解决方案?
亲切的问候,弗洛里安
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 应该是客户端曾经与之交谈的唯一服务器。其他所有内容都将被隐藏。)
因为它是从HttpServletRequest
in读取主机和端口LoginUrlAuthenticationEntryPoint
。但是服务器看到的请求是Zuul代理发送的请求。所以我被转发到一个内部 IP 而不是代理上的端点。
我试图将登录页面的 URL 设置WebSecurityConfigurerAdapter.configure(HttpSecurity)
为我的 Zuul 代理的绝对 URL。但这只是导致我的应用程序抱怨重定向太多。(可能在那里造成了循环。)
设置它的最佳方法是什么?
- 我是否必须通过覆盖 bean 来实现某种自己的转发策略?
- 是否有我缺少的配置选项?
- 我的想法本身是错误的吗?(在他对如何避免使用 Zuul 重定向到另一个主机的回答中? Dave Syer 说你通常不会代理这个,但没有解释原因。)
filter - 如何将修改/包装的 HTTPServletRequest 传递给后续的 Zuul 过滤器?
我们有一个 Zuul Pre-Filter (Filter1),它将检查传入的 HTTPServletRequest 并对其中的查询参数进行一些更改,以将其嵌入到自定义创建的请求中(包装 HttpServletRequestWrapper)。
现在,我想将此自定义包装请求传递给下一个 Zuul Pre-Filter (Filter2)。我怎样才能做到这一点 ?
之前在使用常规 Servlet 过滤器时,我们在我的 Filter1 中使用如下
但是,在 Zuul 过滤器中,Zuul 框架负责调用后续过滤器并传递请求/响应对象。我怎样才能覆盖它?
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 中工作。
spring-boot - 将基于内部尤里卡的链接重写为zuul代理中的外部链接
我正在使用 spring-boot 服务编写一个基于微服务的应用程序。
对于通信,我使用 REST(带有 hatoas 链接)。每个服务都向 eureka 注册,所以我提供的链接都是基于这些名称的,以便功能区增强的 resttemplates 可以使用堆栈的负载平衡和故障转移功能。
这适用于内部通信,但我有一个单页管理应用程序,它通过基于 zuul 的反向代理访问服务。当链接使用真实的主机名和端口时,链接被正确重写以匹配从外部可见的 url。这当然不适用于我在内部需要的符号链接......
所以在内部我有如下链接:
zuul 代理应该将其重写为
我在 zuul 中或沿途的某个地方缺少什么可以使这更容易的东西吗?
现在我正在考虑如何可靠地自己重写网址而不会造成附带损害。
应该有更简单的方法吧?