背景说明
给网站设置Cloudflare CDN后,服务器端的日志记录的请求来源IP均为CloudFlare的IP,看不到原始请求IP。而CloudFlare DashBoard每次只能查看24小时范围内的访问记录,不方便批量查看。
配置前后对比
access.log记录如下图所示,配置前,请求来源IP均为CloudFlare的IP,看不到原始请求IP(下图172开头的IP地址);配置后,请求来源可以记录真实的IP地址(下图IPv6地址为本人通过移动网络访问的真实IP地址)
配置步骤
首先确保nginx是否启用了http_realip
模块。我这里是在Ubuntu 22.04中使用apt安装的nginx,已经包含了该模块。可以使用如下指令检查nginx -V
输出的信息是否包含--with-http_realip_module
。
nginx -V 2>&1 | grep "realip"
然后修改nginx的配置文件/etc/nginx/nginx.conf
,在http块中添加类似如下内容(参考Restoring original visitor IPs · Cloudflare Support docs)
set_real_ip_from 162.158.0.0/15;(替换为cloudflare的IP,可写多个)
set_real_ip_from 172.64.0.0/13;(替换为cloudflare的IP,可写多个)
real_ip_header CF-Connecting-IP;
其中Cloudflare IP可参考 Cloudflare IP 范围 。经过查看访问日志,我的网站使用Cloudflare CDN后,所有请求来源IP均在这两个地址块范围,后面配置防火墙时也只放通了这两块地址,所以只填了这两个地址块。
最后使用nginx -t
验证配置文件,nginx -s reload
重新加载配置即可。