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

例如:当我的应用程序在端口1234上运行时,用户访问URL http://www.abcxyz.com/,而Nginx命中实际的应用程序URL http://www.abcxyz.com: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;

10-04 23:02