网站套了 CloudFlare CDN 可以增加一定的安全性,还可以提高全球用户的访问速度,所以 CloudFlare 几乎是世界上用户人数最多的 CDN 服务商。
概述
自从我的网站启用了 CloudFlare CDN 以后,宝塔面板 Nginx 访问日志里几乎全是 CloudFlare 的节点 IP 地址,这一度让我很是蛋疼。为了彻底解决这个问题我特意写了一个脚本来自动获取更新 CloudFlare 节点 IP 并自动过滤,然后记录真实的访客 IP 到日志中。
方法
本文以宝塔面板环境为例,将下面的代码复制粘贴到 /www/wwwroot/test/get-cloudflare-ip.sh 新建空白文本中保存。
#!/bin/bash
filepath="https://cdn.otakusay.com/www/wwwroot/test/cloudflare_ip.conf"
echo "#Cloudflare" > $filepath;
for i in `curl https://www.cloudflare.com/ips-v4`; do
echo "set_real_ip_from $i;" >> $filepath;
done
for i in `curl https://www.cloudflare.com/ips-v6`; do
echo "set_real_ip_from $i;" >> $filepath;
done
echo "" >> $filepath;
echo "# use any of the following two" >> $filepath;
echo "#real_ip_header CF-Connecting-IP;" >> $filepath;
echo "real_ip_header X-Forwarded-For;" >> $filepath;
- 代码中的路径 /www/wwwroot/test/cloudflare_ip.conf 可以自行修改
- 实例中的路径 /www/wwwroot/test/get-cloudflare-ip.sh 可以自行修改
然后去宝塔面板计划任务中添加定时 Shell 脚本,执行周期可以自行设定,一般建议每天执行一次即可。
bash /www/wwwroot/test/get-cloudflare-ip.sh
宝塔面板软件商店修改 Nginx 配置,在 http 段中引用刚刚定时任务自动生成的 cloudflare_ip.conf 配置文件。
#套CDN以后获取访客真实IP
include /www/wwwroot/test/cloudflare_ip.conf;
验证
打开浏览器访问你的网站,然后回到宝塔面板查看 Nginx 访问日志,已经可以获取到访客的真实 IP 了。