我在服务器上部署了一个 MEAN Stack 应用程序,并使用 Nginx 作为代理服务器来处理请求并重定向到应用程序的特定端口。
例如:用户访问 URLhttp://www.abcxyz.com/
并且 Nginx访问实际应用程序 URL http://www.abcxyz.com:1234/
,因为我的应用程序在端口 1234 上运行。
现在,出于分析目的,我在 node.js 中编写了一个简短的脚本,用于获取访问我网站的用户的 IP 和位置。我可以看到外部搜索的查询,但我正在获取我自己服务器的 IP 地址和位置。这是为什么?
那是因为Nginx吗?如何解决此问题并获取用户的实际位置?
更新:我添加了一个对我有用的答案。干杯;-)
如果您使用快递:
设置非假信任代理值会导致三个重要变化:
req.hostname 的值来自 X-Forwarded-Host 头中设置的值,可以由客户端或代理设置。
X-Forwarded-Proto 可以由反向代理设置来告诉应用程序是 https 还是 http 甚至是无效名称。该值由 req.protocol 反映。
req.ip 和 req.ips 值填充了来自 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,则可以从标头中获取 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;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句