如何实现这样的流程

时间:2019-06-18 08:29:01

标签: java docker httprequest flow mitmproxy

我想在图片上得到这样的流动。有什么方法可以拦截docker容器中的所有HTTP请求,修改其标头然后发送它们?请注意,第一个请求的URI指向APP 4,而不是APP 2。enter image description here

1 个答案:

答案 0 :(得分:0)

Docker不直接支持您所描述的内容。它真正支持的唯一的networking setup开箱即用的是每个应用程序都具有专用于主机的NAT的专用网络。如果您认为需要某种更复杂的拓扑,交通拦截器或自动代理,则可以使用“手动构建”。

在您显示的图表中,有两件事对我产生了影响。将“ App 1”和“ App 2”显示在同一容器中,这几乎不是最佳实践。每个组件都有一个localhost URL,但这也是一个微妙的话题(在Docker容器中,容器本身localhost)。

一个非常典型的设置本身不使用自动流量拦截 ,而只是让外部客户端针对某种反向代理。看起来有点像

+- Docker network ----------------------+
| +- Container -+     +- Container -+   |
| | Application | <-- | Nginx Proxy | <---- Client
| +-------------+     +-------------+   |
+---------------------------------------+

您可以使用

开始此堆栈
docker network create appnet
docker run --net appnet --name application my/application
docker run --net appnet --name nginx_proxy -p 8081:80 my/nginx

由于两个容器位于同一Docker网络上,因此nginx配置可以proxy_pass http://application/;。由于使用-p选项,外部客户端可以访问http://host.example.com:8081/并将其转到代理。