Cloudflare

使用Cloudflare后,在Nginx配置中相应位置添加如下代码以获取用户真实IP

set_real_ip_from 0.0.0.0/0;
real_ip_header CF-Connecting-IP;

Gcore CDN

 

 

set_real_ip_from 0.0.0.0/0;
real_ip_header X-Forwarded-For;

AWS Cloudfront

需要利用到CloudFront-Viewer-Address请求头,但该请求头默认未启用,需手动前往Cloudfront控制面板开启。开启方法可参考如何从CloudFront上获取客户端真实IP地址。开启后,使用以下代码获取访客真实IP。

set_real_ip_from 0.0.0.0/0;
real_ip_header CloudFront-Viewer-Address;

Netlify

Netlify不支持X-Forwarded-For请求头,获取访客真实IP需使用专属请求头X-Nf-Client-Connection-Ip。

set_real_ip_from 0.0.0.0/0;
real_ip_header X-Nf-Client-Connection-Ip;

Vercel

Vercel支持多个请求头转发用户IP,分别是X-Forwarded-For,X-Vercel-Forwarded-For和X-Real-Ip,其中X-Forwarded-For和X-Real-Ip内容相同,X-Vercel-Forwarded-For大部分情况下内容和X-Forwarded-For以及X-Real-Ip相同。

 

X-Real-Ip请求头似乎已经被Vercel弃用,或仅提供给付费用户。

 

区别在于X-Forwarded-For和X-Real-Ip的值可以被覆盖,而X-Vercel-Forwarded-For不能。

假设Vercel的CDN节点是A,那么访客B(IP:1.2.3.4)请求A节点,一般情况下X-Forwarded-For,X-Vercel-Forwarded-For和X-Real-Ip的结果就都是1.2.3.4,但是假如访客B向Vercel CDN节点发送了一个值为8.8.8.8的X-Forwarded-For请求头,那么X-Forwarded-For和X-Real-Ip的值将会被改为8.8.8.8,而X-Vercel-Forwarded-For则仍然是1.2.3.4。这也就是说X-Forwarded-For和X-Real-Ip有一定几率被伪造,所以除非你在Vercel前还用了另一个CDN/代理服务器,否则一般情况下用X-Vercel-Forwarded-For获取访客真实IP更保险。

Bunny CDN

使用Bunny CDN获取访客真实IP,需要先在CDN面板关闭IP匿名化,关闭后使用以下代码获取访客真实IP。

set_real_ip_from 0.0.0.0/0;
real_ip_header X-Forwarded-For;

阿里云CDN

set_real_ip_from 0.0.0.0/0;
real_ip_header Ali-CDN-Real-IP;

其他CDN

除CDN厂商有特殊说明外,一般情况下使用X-Forwarded-For请求头获取访客IP。

 

来源:

参与评论