docker - 如何中继来自 docker 容器的出站请求以修改标头?
问题描述
我有一个在配置有 NGINX 反向代理的 Docker 中运行的应用程序。该应用程序是二进制文件,我没有源代码,也无法从应用程序本身修改 HTTP 请求的标头。我的目标是在请求从主机发出之前附加一个标头字段:
/// @dev some http proxy or similar
listener(PORT, function(request) {
// 1) modifies header
request.setHeader('FOO', 'bar')
// 2) passes through to original or intended destination
request.continue()
})
关键是在运行 Docker 应用程序的主机中修改请求的标头。
我查看了 MITM 代理并使用 iptables 或 socat 重新路由 Docker 出站流量。
您对此操作有什么建议吗?
解决方案
你可以使用Traefik 反向代理v2.4+ 并启用Traefik Pilot和像Header transformation这样的插件。
您将Traefik作为一个容器运行,它将流量路由到其他容器。然后,您可以使用启用插件的令牌将您的实例链接到Traefik Pilot 。如果您在docker-compose.yml文件中使用标签:
services:
traefik:
# ...
labels:
- "--pilot.token=XXXXXXXX"
# ...
要添加插件,您还可以将标签添加到Traefik服务和您的应用程序:
services:
traefik:
# ...
labels:
# ...
- "--entrypoints.web.address=:80"
- "--pilot.token=XXXXXXXX"
- "--experimental.plugins.htransformation.modulename=github.com/tommoulard/htransformation"
- "--experimental.plugins.htransformation.version=v0.2.3"
your_service:
# ...
labels:
- "traefik.enable=true"
- "traefik.http.routers.your_service.rule=Host(`some.host`)"
- "traefik.http.routers.your_service.entrypoints=web"
- "traefik.http.routers.your_service.middlewares=add_header"
- "traefik.http.middlewares.add_header.plugin.htransformation.Rules[0].Name=set_foo"
- "traefik.http.middlewares.add_header.plugin.htransformation.Rules[0].Header=FOO"
- "traefik.http.middlewares.add_header.plugin.htransformation.Rules[0].Value=bar"
- "traefik.http.middlewares.add_header.plugin.htransformation.Rules[0].Type=Set"
您还可以使用YAML或TOML中的其他配置文件,所有内容都显示在文档中。
推荐阅读
- python - 如何在轮廓 OpenCV 中找到“区域”?
- android - 为什么@drawable/logo 不会调整大小?
- react-native - 如何通过调度将文本输入变量的状态发送到减速器并将其显示在另一个屏幕上?
- jquery - 如何检查 jQuery 是否支持某些浏览器?
- java - 在 Scala 中使用大量列转换数据帧行
- c# - 一些孩子没有显示在堆栈面板中
- azure - 向 Azure REST API 请求新部署后,如何预配(和计费)云服务?
- asp.net - URL重写到另一个子域
- css - 为什么标签给出不同的输出
- 应用悬停背景时标记?
- r - 为 R 中的选定列计算数据表中的行平均值的问题