快递/节点请求者IP

问题描述:

我正在尝试构建一个API,它为不同的IP地址返回不同的东西。例如,重定向到我的服务器(比如google.com)的某个域将显示一件事,而另一个域(如amazon.com)会显示不同的内容。快递/节点请求者IP

我曾尝试使用中间件,看req.ip,但它似乎像req.ip总是从任何请求返回“:: ffff:127.0.0.1”。另外,我想限制通过最后跳转到我的服务器的连接 - 即显示基于website.com的不同内容,其中: 客户端浏览器 - > website.com - >我的服务器。

我怎么会去这样做使用Express.js

编辑:我认为人们误解我的问题:我不希望由客户端的IP过滤我的结果。我想过滤最后反弹到我的服务器的结果。即如果客户端连接到redirect.com并重定向到我的服务器,我想检测redirect.com的IP和基于此的过滤器。假设有另一个名为fam.com的网站也转发到我的服务器。我想向fam.com显示不同的内容,而不是redirect.com。

+0

你使用任何类型的代理?如果是的话,你需要配置你的代理转发ip –

+0

将req.ip在express然后返回请求的起始地址或最接近的反弹? – intrinsiciwnl

+0

如果您使用代理服务器,请查看是否设置了'refferer'标题。否则,尝试从客户端发送IP作为变量。 –

这对我有用。

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

if (ip && ip.startsWith("::ffff:")) { 
    ip = ip.replace("::ffff:", "") 
} 
+0

好像这个解决方案的一个变种现在可以工作。使用app.set('trust proxy'),然后req.ips的最后一个值给出最后一个代理从请求中退出。看起来像x-forwarded-for头可以被欺骗,但是...希望我可以找出别的东西来检测试图欺骗头的人。 – intrinsiciwnl