容器中的 Node.js 总是获取 docker0 ip

sun*_*yku 5 nginx docker

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

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

console.log(req.ip + ' ' + req.protocol + ' ' + req.originalUrl);
Run Code Online (Sandbox Code Playgroud)

记录流量。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;
Run Code Online (Sandbox Code Playgroud)

cat /proc/sys/net/ipv4/ip_forward # output 1
Run Code Online (Sandbox Code Playgroud)

Tim*_*Tim 5

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

从上面的链接:

var ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
Run Code Online (Sandbox Code Playgroud)

哦,有趣的是 - 上述线程中的第二个答案实际上可能更适合您的需求。而不是在任何地方更改您的代码,而是尝试获取用户的 IP 地址。您可以更改初始化 express 的方式:

app.enable('trust proxy');
Run Code Online (Sandbox Code Playgroud)