前言

使用过 Cloudflare CDN 给网站“加速”的朋友应该都知道,开启小云朵后网站访问日志的客户端 IP 地址和实际的用户 IP 并不一致,全部变成了 Cloudflare 的代理服务器 IP,如果有遇到这个问题可以按照下面的方法解决。

操作步骤

1.在任意你想要的目录编写 sh 脚本文件

nano /etc/nginx/cloudflare-cdn-ip.sh

写入以下代码:

#!/bin/bash

# Nginx扩展配置文件保存路径
filepath="/etc/nginx/cloudflare-cdn-ip.conf"

# 输出注释内容到配置文件
echo "# Cloudflare" > $filepath;
# 获取并输出 Cloudflare IPv4 地址段到配置文件
for i in `curl https://www.cloudflare.com/ips-v4`; do
echo "set_real_ip_from $i;" >> $filepath;
done
# 获取并输出 Cloudflare IPv4 地址段到配置文件
for i in `curl https://www.cloudflare.com/ips-v6`; do
echo "set_real_ip_from $i;" >> $filepath;
done

# 输出换行到配置文件
echo "" >> $filepath;
# 通过指定的标头获取客户端IP(以下两行代码二选一,默认使用CF-Connecting-IP标头)
echo "real_ip_header CF-Connecting-IP;" >> $filepath;
echo "#real_ip_header X-Forwarded-For;" >> $filepath;

# 重新加载 nginx 配置文件
systemctl reload nginx

2.首次运行脚本,生成Nginx扩展配置文件

bash /etc/nginx/cloudflare-cdn-ip.sh

3.修改 nginx 主配置文件

nano /etc/nginx/nginx.conf

在 http{} 内添加以下代码

# 引用扩展的配置文件
include /etc/nginx/cloudflare-cdn-ip.conf;

4.定期更新 Cloudflare CDN IP 列表(可选)

编辑任务计划

crontab -e

在文件底部添加代码:

# 每天0点30分运行脚本,更新 Cloudflare CDN IP列表,不产生日志。
30 0 * * * bash /etc/nginx/cloudflare-cdn-ip.sh > /dev/null
最后修改:2023 年 10 月 31 日
如果觉得我的文章对你有用,请随意赞赏