获取请求的真实 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
其他请求处理框架很可能有自己的包来做类似的事情。
Cloudflare 更改传入请求的 IP 地址,因为 Cloudflare 是我的网站和 Internet 之间的中间件,一个代理。
我应该如何获取请求的初始 IP 地址,而不是 Cloudflare 的 IP 地址。我听说过 mod_cloudflare
但这个插件是否只更新我日志中的 IP 地址(?)而且我没有找到 Nginx 的版本。
Cloudflare 在每个请求上设置 CF-Connecting-IP
and the X-Forwarded-For
headers
您可以简单地从他们的特殊 header:
获取 IPlet 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
其他请求处理框架很可能有自己的包来做类似的事情。