获取在docker容器中运行的节点应用的IP地址

时间:2016-05-10 14:37:20

标签: javascript node.js express docker request

我有一个在Docker容器中运行的节点快速应用程序,并通过应用程序尝试记录传入请求的IP地址。由于我在防火墙后面运行了所有内容,因此使用了类似这样的内容" req.headers [' x-forwarded-for'] || req.connection.remoteAddress"但它每次都记录相同的IP地址,无论请求来源如何。即使它是由不同的IP制作的,我也总能看到相同的IP。

是否有一种优雅的方式来记录在docker容器中运行的节点应用程序的IP地址。将使用此包帮助https://www.npmjs.com/package/ip

如果没有,请建议一种捕获IP地址的方法。

1 个答案:

答案 0 :(得分:0)

我知道这是旧的,但这可能仍然有帮助。

对我有用的是我的 Express 容器和 NGINX 在主机上作为反向代理运行的组合。

对于 NGINX,我添加了以下设置:

    proxy_pass http://localhost:9461;               # <-- put the exposed port of the Docker Express container
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

根据上述内容,一旦我访问我的 Express 容器(通过我指定的 NGINX server_name),请求的 IP 将存储在 req.headers['x-forwarded-for'] 中:

    console.log("IP of this request is:", req.headers['x-forwarded-for']);