如何将来自容器的 HTTP 请求代理到 docker 中的特定地址(:端口)?
How to proxy HTTP request from container to a specific address(:port) in docker?
我目前正在创建一个工具来管理 docker 个容器。
所以我正在寻找一种方法来从容器内连接到 lan 中的 api 服务器。
有几台 api 服务器,运行 在不同的主机上。
api 服务器不在端口 80 上,而是在启动时在随机端口上。
要使用 api,您需要在授权中指定令牌 header。
但是,在这种情况下无法将令牌包含在容器中。
要从容器内使用 api,我想将 192.168.0.2:49152
路由到 api.example.com:80
。
我已经完成了以下操作。
docker run -it \
--add-host=api.example.com:192.168.0.2 \
image:version main.sh
我们认为无法将端口或令牌附加到上述命令,因此我们执行了以下操作。
docker run -it \
--add-host=api.example.com:192.168.0.10 \
--env HTTP_PROXY="http://host.docker.internel:49513" \
image:version main.sh
正如您在上面看到的,我想到了在该工具上附加一个代理服务器。
代理服务器侦听 49513
.
等端口
代理服务器自带Authorization,将请求转发到容器中的api
此实现的问题在于它代理了所有 HTTP 通信。
如果代理所有 HTTP 通信,通信会出现延迟,需要 real-time 性能。
由于此工具管理大量容器,因此此问题被认为很严重。
在docker的Proxy中有NO_PROXY,但是没有像YES_PROXY这样的代理白名单,这与此相反。
我正在考虑扩展上述实现。
有什么好的想法请告诉我。
我正在使用翻译器,所以如果您有任何问题,请发表评论,我会尽力解答。如果您有任何问题或意见,请给我留言。
谢谢。
您可以将代理服务器配置为透明的http代理服务器
假设代理服务器IP为192.168.0.20,API服务器IP为192.168.0.10
docker run -it \
--add-host=api.example.com:192.168.0.20 \
image:version main.sh
使用nginx配置代理服务器
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://192.168.0.10:xxx;
proxy_set_header Host $host;
}
}
这样,只有api.example.com
的请求才会被发送到代理服务器。
我目前正在创建一个工具来管理 docker 个容器。
所以我正在寻找一种方法来从容器内连接到 lan 中的 api 服务器。
有几台 api 服务器,运行 在不同的主机上。
api 服务器不在端口 80 上,而是在启动时在随机端口上。
要使用 api,您需要在授权中指定令牌 header。
但是,在这种情况下无法将令牌包含在容器中。
要从容器内使用 api,我想将 192.168.0.2:49152
路由到 api.example.com:80
。
我已经完成了以下操作。
docker run -it \
--add-host=api.example.com:192.168.0.2 \
image:version main.sh
我们认为无法将端口或令牌附加到上述命令,因此我们执行了以下操作。
docker run -it \
--add-host=api.example.com:192.168.0.10 \
--env HTTP_PROXY="http://host.docker.internel:49513" \
image:version main.sh
正如您在上面看到的,我想到了在该工具上附加一个代理服务器。
代理服务器侦听 49513
.
等端口
代理服务器自带Authorization,将请求转发到容器中的api
此实现的问题在于它代理了所有 HTTP 通信。
如果代理所有 HTTP 通信,通信会出现延迟,需要 real-time 性能。
由于此工具管理大量容器,因此此问题被认为很严重。
在docker的Proxy中有NO_PROXY,但是没有像YES_PROXY这样的代理白名单,这与此相反。
我正在考虑扩展上述实现。 有什么好的想法请告诉我。
我正在使用翻译器,所以如果您有任何问题,请发表评论,我会尽力解答。如果您有任何问题或意见,请给我留言。
谢谢。
您可以将代理服务器配置为透明的http代理服务器
假设代理服务器IP为192.168.0.20,API服务器IP为192.168.0.10
docker run -it \
--add-host=api.example.com:192.168.0.20 \
image:version main.sh
使用nginx配置代理服务器
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://192.168.0.10:xxx;
proxy_set_header Host $host;
}
}
这样,只有api.example.com
的请求才会被发送到代理服务器。