Cloudflare更改了传入请求的IP地址,因为Cloudflare是我的网站和Internet之间的中间件(代理)。
我应如何获取请求的初始IP地址,而不是Cloudflare的IP地址。我听说过mod_cloudflare
,但是此插件仅更新日志(?)中的ip地址,却没有找到nginx的版本。
答案 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
其他请求处理框架很可能拥有自己的程序包来执行类似的操作。