容器中的Node.js总是得到docker0 ip

时间:2015-12-24 17:11:41

标签: nginx docker

我在docker容器中托管带有express.js的node.js服务器。 我的容器的地址是172.17.0.62 我使用nginx将流量重定向到172.17.0.62

我可以访问我的服务器。 但是当我使用

console.log(req.ip + ' ' + req.protocol + ' ' + req.originalUrl);

记录流量。 req.ip总是172.17.42.1。 我想获取我的网页的查看器的IP

我在我的nginx配置中使用它

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

cat /proc/sys/net/ipv4/ip_forward # output 1

2 个答案:

答案 0 :(得分:2)

我还没有使用过docker - 但你应该能够从x-forwarded-for获取你想要的信息: Express.js: how to get remote client address

从以上链接:

var ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;

哦,有趣的是 - 上述帖子中的第二个答案实际上可能超出您的需求。而不是改变你的代码到处试图获取用户的IP地址。您可以更改初始化快递的方式:

app.enable('trust proxy');

答案 1 :(得分:0)

仅供参考,这在群体条件下是不可能的。我偶然发现了这个问题,试图寻找解决方案。我在 docker-compose 设置中有一个 nginx 容器,但无法获取我客户端的 IP,因此我需要从 swarm 中删除 nginx 路由。这显然是一个已知问题:https://github.com/moby/moby/issues/25526