1. 问题描述
Web服务用node的express框架跑的,采用docker部署方式。
docker容器内node服务,请求头req.header里面的请求ip为docker服务宿主机(即docker服务部署机器的ip),而不是浏览器客户端真实ip。
如何在web服务的docker容器内,获取客户端实际ip呢,谢谢!
Web服务用node的express框架跑的,采用docker部署方式。
docker容器内node服务,请求头req.header里面的请求ip为docker服务宿主机(即docker服务部署机器的ip),而不是浏览器客户端真实ip。
如何在web服务的docker容器内,获取客户端实际ip呢,谢谢!
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
可用两种办法
修改 docker 所在网络。
取决于你在哪里运行 Docker, 是直接运行,还是用 k8s, docker-compose 之类的,配置上可能会不同。
说一下直接运行的情况。Docker 直接运行时,如未指定网络参数,Docker创建了一个隔离的网络,以便桥接网络中的每个容器都可以进行通信。即默认为
bridge
模式。这个模式下,容器在一个 docker 创建的子网里docker0
,172.17.0.1
是docker0
网络上的默认路由。参见官方文档:https://docs.docker.com/network/
指定为 host 或 macvlan 模式可以获取与主机同一个子网的 ip 地址,不经过 nat 转换,自然也就可以获得真实的客户端 ip 地址了。
通过前端负载均衡或 nginx 代理
通过能获取真实 ip 的前端 nginx 代理,然后通过类似
X-Forwarded-For
的请求头获取用户 ip.