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。不干净,在这个意义上,我需要延长SimpleHostRoutingFilter的zuul
您可以设置一个反向代理 - 配置为通过代理。您的反向代理将使用参数(例如java或nodejs)启动以使用外部代理。该反向代理将是一个不同的过程,它将通过您想要的代理传递所有请求。
您可以通过设置第二个 zuul 代理应用程序或通过 Nodejs 反向代理(express或node-http-proxy)来完成此操作。
因此,如果您使用 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)
您可以设置代理服务器,然后设置一些例外和规则,确定哪些请求应通过代理路由以及哪些请求应在没有代理的情况下工作。
第二步是将您的应用程序配置为使用步骤 1 中指定的本地代理服务器。为此,您可以使用以下命令行参数:
-Dhttp.proxyHost=localhost -Dhttp.proxyPort=8888
Run Code Online (Sandbox Code Playgroud)
我过去为代理服务器配置了排除列表,但从未配置/编写脚本包含列表。在您的情况下,包含列表会更有意义,因此我会测试可编写脚本/可编程代理服务器,例如:
| 归档时间: |
|
| 查看次数: |
468 次 |
| 最近记录: |