Zuul 通过外部代理服务器路由请求

v78*_*v78 6 proxy spring-boot netflix-zuul

我们目前的项目需求是将一些请求路由到第三方外部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
Run Code Online (Sandbox Code Playgroud)

现在的要求是,对于某些端点,对​​外部 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", ... }'

Run Code Online (Sandbox Code Playgroud)

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

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

Men*_*los 4

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

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

您可以通过设置第二个 zuul 代理应用程序或通过 Nodejs 反向代理(expressnode-http-proxy)来完成此操作。

第二个zuul应用程序(仅适用于外部)

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

   test2:
      path: /proxied-test2/**
      serviceId: test2
      url: http://my.api.server.com 
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用代理的参数在同一台服务器上启动该服务器并在特定端口(例如例如9200)上启动该服务器,例如

-Dhttp.proxyHost=localhost -Dhttp.proxyPort=8888
Run Code Online (Sandbox Code Playgroud)

原始申请

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

zuul:
  routes
    test:
      path: /test/**
      serviceId: test
      url: http://my.api.server.com
    test2:
      path: /test2/**
      serviceId: test2
      url: http://localhost:9200/proxied-test2/
Run Code Online (Sandbox Code Playgroud)

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

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

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

-Dhttp.proxyHost=localhost -Dhttp.proxyPort=8888
Run Code Online (Sandbox Code Playgroud)

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