Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
620 views
in Technique[技术] by (71.8m points)

web nodeJS应用,docker怎样获取客户端真实IP

1. 问题描述

Web服务用node的express框架跑的,采用docker部署方式。

docker容器内node服务,请求头req.header里面的请求ip为docker服务宿主机(即docker服务部署机器的ip),而不是浏览器客户端真实ip。

如何在web服务的docker容器内,获取客户端实际ip呢,谢谢!


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

可用两种办法

修改 docker 所在网络。

取决于你在哪里运行 Docker, 是直接运行,还是用 k8s, docker-compose 之类的,配置上可能会不同。
说一下直接运行的情况。Docker 直接运行时,如未指定网络参数,Docker创建了一个隔离的网络,以便桥接网络中的每个容器都可以进行通信。即默认为 bridge 模式。这个模式下,容器在一个 docker 创建的子网里 docker0172.17.0.1docker0网络上的默认路由。

参见官方文档:https://docs.docker.com/network/

指定为 host 或 macvlan 模式可以获取与主机同一个子网的 ip 地址,不经过 nat 转换,自然也就可以获得真实的客户端 ip 地址了。

docker run --net=host --name your-con -i --rm -p 3307:3306 your-image

通过前端负载均衡或 nginx 代理

通过能获取真实 ip 的前端 nginx 代理,然后通过类似 X-Forwarded-For的请求头获取用户 ip.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...