You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Cloudflare时HTTP_CF_CONNECTING_IP无法获取访客真实IP咨询

问题排查与解决方法
  • 第一步:确认Cloudflare代理状态
    首先检查你域名对应DNS记录的云朵状态,必须是*橙色云朵(已代理)*才会传递CF自定义请求头。如果是灰色仅DNS模式,CF不会对你的请求做代理,自然不会携带HTTP_CF_CONNECTING_IP头,你拿到的还是直接访问的IP。
  • 第二步:校验请求头是否被服务器过滤
    新建一个PHP测试页,输出全部$_SERVER变量确认是否存在HTTP_CF_CONNECTING_IP字段:
    <?php
    var_dump($_SERVER);
    ?>
    
    如果找不到该字段,说明你的共享服务器默认过滤了CF传递的自定义请求头。可以尝试在.htaccess中添加规则保留该头:
    SetEnvIf HTTP_CF_CONNECTING_IP "^(.*)$" HTTP_CF_CONNECTING_IP=$1
    
    配置后依旧不存在的话,需要联系你的主机服务商,要求放开CF相关请求头的传递限制,很多共享主机会默认过滤非标准HTTP头避免安全问题。
  • 第三步:替代验证方案
    如果HTTP_CF_CONNECTING_IP确实拿不到,也可以从$_SERVER['HTTP_X_FORWARDED_FOR']取值,该头是CF默认传递的逗号分隔IP列表,最左侧的IP就是访客真实IP,简易写法参考:
    if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
        $userip = trim($ips[0]);
    } else {
        $userip = $_SERVER['REMOTE_ADDR'];
    }
    

补充说明:你当前配置的安全头和IP获取问题完全无关,这部分配置是浏览器端安全规则,不会影响服务器接收CF的请求头。
后续功能跑通后优化安全性的话,只需要增加判断逻辑:只有当REMOTE_ADDR属于Cloudflare公开的官方IP段时,才信任上述两个头的值,避免攻击者伪造请求头窃取权限。

内容的提问来源于stack exchange,提问作者Martin15789

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 20:42:01