方法 1:修改 Nginx 配置(推荐)
适用于 Nginx 环境,适用于大多数 CDN(如 Cloudflare、腾讯云 CDN、阿里云 CDN 等)。
操作步骤:
-
登录宝塔面板 → 软件商店 → Nginx → 设置 → 配置修改。
-
在
http{
块内添加以下代码(选择一种方案):# 方案一:允许所有IP,(不安全,不建议,仅用来短暂测试) set_real_ip_from 0.0.0.0/0; real_ip_header X-Forwarded-For; # 从 HTTP 头获取真实 IP real_ip_recursive on;
# 方案二:定义 CDN/代理的 IP 段(建议用这种,安全性高) set_real_ip_from 103.21.244.0/22; set_real_ip_from 104.16.0.0/12; # 添加更多 CDN IP 段... # 从 HTTP 头获取真实 IP real_ip_header X-Forwarded-For; real_ip_recursive on;
-
# 方案三:内网/自建代理的情况下,将 IP 段改为实际内网 IP 段(博主是这种情况) set_real_ip_from 192.168.31.0/24;; real_ip_header X-Forwarded-For; real_ip_recursive on;
保存 并 重启 Nginx。
验证:查看/www/wwwlogs/网站名.log
,现在应显示真实用户 IP125。
方法 2:调整日志格式(适用于高级需求)
如果 X-Forwarded-For
方式无效(如某些 CDN 使用 CF-Connecting-IP
),可修改日志格式:
-
在 Nginx 主配置(
nginx.conf
)的http{
块添加:log_format realiplog '$http_x_forwarded_for - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"';
-
在 网站配置文件 中修改
access_log
行:access_log /www/wwwlogs/网站名.log realiplog;
-
重启 Nginx 生效。
方法 3:使用宝塔防火墙(适合新手)
如果不想改代码,可用 宝塔自带的防火墙插件:
-
安装 Nginx 防火墙(免费版或专业版)。
-
进入防火墙 → 站点配置 → 设置 → 开启 “使用 CDN” 选项。
-
保存后,日志会自动记录真实 IP。
方法 4:Apache 环境调整
如果使用 Apache,修改日志格式:
-
进入 Apache 配置 → 找到
LogFormat
行,修改为:LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
-
重启 Apache 生效。
验证是否生效
查看日志文件(/www/wwwlogs/网站名.log
),确认 IP 是否为真实用户 IP(而非 CDN 节点 IP)。
示例日志格式:
123.123.123.123 - - [30/Jul/2025:14:30:00 +0800] "GET / HTTP/1.1" 200 1234 "-" "Mozilla/5.0..."
注意事项
-
CDN 兼容性:部分 CDN(如 Cloudflare)可能需要改用
real_ip_header CF-Connecting-IP;
。 -
安全风险:
set_real_ip_from 0.0.0.0/0
允许所有 IP,建议改为 CDN 厂商的 IP 段(如 Cloudflare 的 IP 列表)。 -
日志分析工具:可使用 GoAccess 或 AWStats 分析真实用户访问数据。
如果仍有问题,可检查 CDN 是否未正确回传 X-Forwarded-For
,或提供具体 CDN 厂商以便进一步排查。