java - 如何实现这样的流量

标签 java docker httprequest dataflow mitmproxy

我想要像图片上这样的流程。有没有办法拦截docker容器内的所有HTTP请求,修改它们的 header 然后发送它们?请注意,第一个请求的 URI 指向 APP 4,而不是 APP 2。enter image description here

最佳答案

Docker 不直接支持您所描述的内容。唯一networking setup它确实支持开箱即用的每个应用程序的专用网络,并通过 NAT 连接到主机;如果您认为需要某种更复杂的拓扑、流量拦截器或自动代理,那么您就处于“手动构建”的境地。

在你展示的图表中,有两件事引起了我的注意。 “应用程序 1”和“应用程序 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/ 并转到代理。

关于java - 如何实现这样的流量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56644839/

相关文章:

java - android 当回车时清除RecyclerView

java - 如何使用Map访问servlet中的httpRequest数据?

java - 检查 HttpServletRequest 的连接是否仍然打开?

java - Kafka KStream 应用程序 - 临时文件清理

java - 为什么 CrudRepository 会发出单独的请求来解析外键对象?

java - 不同的存储库对象将被注入(inject)以引用

docker - Github 操作 Pylint 步骤无法使用测试作业创建目录

docker - 运行撰写yml文件docker-compose.yml的Docker堆栈部署命令错误

logging - Dockerized Kibana 外部化日志

Node.js : which keys in req. 主体存在于模式中