我正在使用以下代码在Node.js中获取IP地址:
const ip = await (req.headers['x-forwarded-for'] || '').split(',').pop().trim() || req.socket.remoteAddress;
对于我家庭WiFi网络上的所有设备以及当我使用手机数据访问我的网站时,我得到的IP地址是:::ffff:127.0.0.1
我正在尝试获取每个访问我的网站的个人设备(手机、笔记本电脑)的IP地址。但是所有设备都显示相同的IP地址。
如何在Node.js中获取每个设备的单独IP地址?
编辑:
我进行了一些更新,不再获得::ffff:127.0.0.1。现在我获得的是互联网连接的IP地址。所以如果我连接到WiFi,我会得到WiFi调制解调器的IP地址。如果我使用数据,我会得到数据连接的IP地址。
但我需要获取设备IP地址。我不想要连接IP地址。我想要设备IP地址。
这是我所做的更改:
我将'trust proxy'设置为true:
app.set('trust proxy', true);
我已更新etc/nginx/sites-available/mysite文件,使其看起来像这样:
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:5050;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
我已更新 etc/nginx/proxy_params 文件,使其内容如下:
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
我做错了什么?我该怎么解决这个问题?从我的阅读中,似乎我应该能够使用req.headers [ 'x-forwarded-for']来获取正确的IP地址,但是req.headers [ 'x-forwarded-for']返回与req.headers [ 'x-real-ip']相同的内容,只不过它是一个数组。