使用Cloudflared后获取用户真实IP
本文最后更新于 751 天前,部分内容可能已经过期且不再具有参考价值,请自行判断。

如果不知道这是什么,可以看看:

由于Cloudflared使用的是类似反向代理的技术,所以说服务获取到的IP大概率是Cloudflared所在服务器的IP。当然Cloudflare也深知这一点:

所以Cloudflare团队给出了一个解决方案。简单来说就是Cloudflare会在请求头加入CF-Connecting-IP来记录访问者的真实IP,只需要修改一下Nginx配置文件即可使用。

依照文档的意思以及我踩过的坑,我的建议是新建一个文件cloudflare.conf保存在Nginx的配置文件目录下:

#Cloudflare
#Cloudflare IP Address: https://www.cloudflare-cn.com/ips/

# - IPv4
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 104.16.0.0/13;
set_real_ip_from 104.24.0.0/14;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 131.0.72.0/22;

real_ip_header CF-Connecting-IP;
set_real_ip_from 192.168.0.9;

文档的意思是让我们把所有Cloudflare服务器的IP拉入信任名单,让Nginx读取CF-Connecting-IP的值并将其作为用户的真实IP。但事实上这里有一个坑,我们还需要把我们服务器的IP加入信任列表:

网站日志

要填什么IP具体取决于这里显示的是什么,比如我的就是192.168.0.9,就在上面的配置文件加入set_real_ip_from x.x.x.x;即可。

下一步只需要打开Nginx的配置文件,在http {...}中加入include cloudflare;即可(”cloudflare”也可以是上面的配置文件的路径)

user root;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
error_log /dev/stdout notice;
pid /var/run/nginx.pid;

events {
...
}

http {
...
include cloudflare;
...
}

...

现在应该就能读取到用户的真实IP了🥰

本文章遵循CC BY-SA 4.0协议,转载或引用请留意该协议的内容。
上一篇
下一篇