Cloudflare会更改传入请求的IP地址,因为Cloudflare是我的网站和互联网之间的中间件代理。
我应该如何获取请求的初始IP地址而不是Cloudflare的IP地址。我听说过mod_cloudflare
,但这个插件只会在我的日志中更新IP地址吗?而且我没有找到Nginx版本。
Cloudflare会更改传入请求的IP地址,因为Cloudflare是我的网站和互联网之间的中间件代理。
我应该如何获取请求的初始IP地址而不是Cloudflare的IP地址。我听说过mod_cloudflare
,但这个插件只会在我的日志中更新IP地址吗?而且我没有找到Nginx版本。
Cloudflare会在每个请求中设置CF-Connecting-IP
和X-Forwarded-For
头
您可以从他们的特殊标头中轻松获取IP:
let ip = req.headers['cf-connecting-ip']
如果您预计会有来自Cloudflare以外的请求,可以通过以下方式获取这些IP地址:
let otherIp = req.headers['x-forwarded-for'] || req.connection.remoteAddress
但是要小心,其他代理(例如Nginx)也会设置x-forwarded-for
头。
req.cf_ip
返回的IP是:2a02:1810:9410:7b00:8829:fc7f:b81f:10f。您知道这是什么吗? - Michielreq.body.remoteAddress
,那么它就是一个ipv4地址。在Nodejs中有没有一种方法可以检查响应是ipv4还是ipv6? - Michiel您正在使用Express吗?如果是的话,您可以使用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的trust proxy
设置。
例如:
app.set( 'trust proxy', 'loopback' ); //trust localhost reverse proxy
其他请求处理框架很可能有自己的包来完成类似的事情。
req.cf_ip
返回了这个IP地址:2a02:1810:9410:7b00:8829:fc7f:b81f:10f,你知道这是什么吗? - Michiel