NodeJS-获取请求的真实IP地址,而不是Cloudflare的IP地址

时间:2018-08-26 13:16:16

标签: javascript node.js nginx cloudflare

Cloudflare更改了传入请求的IP地址,因为Cloudflare是我的网站和Internet之间的中间件(代理)。

我应如何获取请求的初始IP地址,而不是Cloudflare的IP地址。我听说过mod_cloudflare,但是此插件仅更新日志(?)中的ip地址,却没有找到nginx的版本。

2 个答案:

答案 0 :(得分:2)

Cloudflare在每个请求上设置CF-Connecting-IP and the X-Forwarded-For headers

您只需从该标头中获取IP:

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

我之所以选择顺序,是因为Nginx还设置了X-Forwarded-For标头

答案 1 :(得分:0)

您在使用快递吗?如果是这样,您可以使用cloudflare-express中间件程序包来检索所需的IP地址。

var cloudflare = require('cloudflare-express');
...
var express = require('express');
var app = express();
...
app.use(cloudflare.restore({update_on_start:true}));

然后,用户的原始地址在req对象上显示为cf_ip

如果您的Express应用程序位于典型的nginx反向代理之后,您也可以使用express's trust proxy setting

例如:

    app.set( 'trust proxy', 'loopback' ); //trust localhost reverse proxy

其他请求处理框架很可能拥有自己的程序包来执行类似的操作。