gpt4 book ai didi

node.js - 获取我自己的服务器的 IP 地址和位置,而不是访问用户的服务器

转载 作者:太空宇宙 更新时间:2023-11-03 22:10:34 27 4
gpt4 key购买 nike

我在服务器上部署了 MEAN Stack 应用程序,并使用 Nginx 作为代理服务器来处理请求并重定向到应用程序的特定端口。

例如:用户访问 URL http://www.abcxyz.com/,Nginx 访问实际应用程序 URL http://www.abcxyz.com:1234/,因为我的应用程序在端口 1234 上运行。

现在,出于分析目的,我在 node.js 中编写了一个简短的脚本,用于获取访问我网站的用户的 IP 和位置。我可以看到外部搜索的查询,但我正在获取自己服务器的 IP 地址和位置。这是为什么?

是因为 Nginx 吗?如何解决此问题并获取用户的实际位置?

Update: I have added an Answer, which works for me. Cheers ;-)

最佳答案

如果您使用 express :

Setting a non-false trust proxy value results in three important changes:

The value of req.hostname is derived from the value set in the X-Forwarded-Host header, which can be set by the client or by the proxy.

X-Forwarded-Proto can be set by the reverse proxy to tell the app whether it is https or http or even an invalid name. This value is reflected by req.protocol.

The req.ip and req.ips values are populated with the list of addresses from X-Forwarded-For.

http://expressjs.com/es/guide/behind-proxies.html

app.enable('trust proxy');
app.all("*", (req, res, next) => {

console.log(req.ip, req.ips);
//Do whatever you want or call next()
});

如果您不使用express,您可以从 header 获取IP:x-forwarded-for

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

如果您没有获得正确的 IP,则需要在 Nginx 中进行正确的设置:

http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_set_header

proxy_set_header X-Forwarded-For $remote_addr;

或将远程用户 IP 附加到任何现有的 X-Forwarded-For 值:

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

关于node.js - 获取我自己的服务器的 IP 地址和位置,而不是访问用户的服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43394757/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com