Bootstrap

使用Cloudflare CDN后,查看网站访问者真实ip的方法——以Nginx为例

背景说明

给网站设置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重新加载配置即可。