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

Get real IP address of a request instead of Cloudflare's IP address

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

我应该如何获取请求的初始 IP 地址,而不是 Cloudflare 的 IP 地址。我听说过 mod_cloudflare 但这个插件是否只更新我日志中的 IP 地址(?)而且我没有找到 Nginx 的版本。

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

您可以简单地从他们的特殊 header:

获取 IP
let ip = req.headers['cf-connecting-ip']

如果您希望请求来自 Cloudflare 之外,您可以通过以下方式获取这些 IP:

let otherIp = req.headers['x-forwarded-for'] || req.connection.remoteAddress

不过,请注意,其他代理(如 Nginx)也会设置 x-forwarded-for header。

您使用快递吗?如果是这样,您可以使用 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

其他请求处理框架很可能有自己的包来做类似的事情。