【问题标题】:Zuul routing the requests through an external proxy serverZuul 通过外部代理服务器路由请求
【发布时间】:2021-01-30 17:23:23
【问题描述】:

我们目前的项目要求是将一些请求路由到第三方外部 api 服务器。为此,我们使用基于 spring zuul 的路由器服务。

zuul:
  routes
    test:
      path: /test/**
      serviceId: test
      url: http://my.api.server.com
    test2:
      path: /test2/**
      serviceId: test2
      url: http://my.api.server.com // but through an external proxy

现在的要求是,对于某些端点,对​​外部 api 服务器的请求已经通过一些外部代理服务器路由,而不是我们拥有的,

如何通过 curl 做到这一点是:

curl <external_api_server>/api/v1/user -k \
  -x tntqyhnhjym.sandbox.verygoodproxy.com:8080 \
  -H "Content-type: application/json" \
  -d '{"card_number": "tok_sandbox_t8VSoovCuHA779eJGZhKvg", ... }'

-x &lt;proxy&gt; 通过给定的代理重定向请求。 如何通过 spring-zuul 服务器做到这一点?

有一个线索,我得到了? https://github.com/spring-cloud/spring-cloud-netflix/issues/2320。不干净,在某种意义上我需要扩展SimpleHostRoutingFilterzuul

【问题讨论】:

  • Service serviceId: test2 是您的微服务之一,您想将 test2 的请求转发到外部服务器是吗?如果是,我们可能会创建 pre 类型的过滤器,以将请求转发到外部服务器的 /test2/** 端点,让我知道您对此的想法
  • @PatelRomil, test2 是我的微服务之一,我想将请求转发到我的api服务器(不是外部服务器),但条件是我想通过路由请求代理服务器。见例子hc.apache.org/httpcomponents-client-ga/httpclient/examples/org/…

标签: spring-boot proxy netflix-zuul


【解决方案1】:

选项 1 - 反向代理服务器(使用代理)

您可以设置一个反向代理 - 配置为通过代理。您的反向代理将使用参数(例如 java 或 nodejs)启动以使用外部代理。此反向代理将是一个不同的进程,它将通过您想要的代理传递所有请求。

您可以通过设置第二个 zuul 代理应用程序或通过 nodejs 反向代理(expressnode-http-proxy)来实现。

第二个zuul应用(仅限外部)

因此,如果您使用 zuul,您将使用以下内容创建第二个应用程序:

   test2:
      path: /proxied-test2/**
      serviceId: test2
      url: http://my.api.server.com 

然后,您将使用代理的参数和特定端口(例如9200)在同一服务器上启动此服务器,例如

-Dhttp.proxyHost=localhost -Dhttp.proxyPort=8888

原始申请

在您的原始应用程序中,您可以将您的路线替换为以下内容。

zuul:
  routes
    test:
      path: /test/**
      serviceId: test
      url: http://my.api.server.com
    test2:
      path: /test2/**
      serviceId: test2
      url: http://localhost:9200/proxied-test2/

选项 2:使用可编写脚本的 http 代理服务器

你可以设置一个代理服务器,然后设置一些例外和规则,哪些请求应该通过代理路由,哪些请求应该在没有代理的情况下工作。

第二步是将您的应用程序配置为使用第 1 步中指定的本地代理服务器。为此,您可以使用以下命令行参数:

-Dhttp.proxyHost=localhost -Dhttp.proxyPort=8888

我过去曾为代理服务器配置过排除列表,但我从未配置/编写过包含列表。在您的情况下,包含列表会更有意义,因此我将测试可编写脚本/可编程的代理服务器,例如:


【讨论】:

    猜你喜欢
    • 2018-10-10
    • 1970-01-01
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    相关资源
    最近更新 更多