V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
WesleyNZ
V2EX  ›  问与答

CloudFlare 把所有访客的 IP 全都变成了他们自己的 IP,这怎么解决?很郁闷啊。

  •  
  •   WesleyNZ · 2020-10-04 10:15:50 +08:00 · 7121 次点击
    这是一个创建于 1529 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://support.cloudflare.com/hc/zh-cn/articles/200168236-Cloudflare-IP-地理位置有什么作用-

    我是小白,只懂一些网站皮毛

    请问 cloudflare 到底把这些访客的真实 IP 数据放在哪里了? 在我网站数据库的哪个地方? 如何查看? 我用的是 CPanel 。

    然后他也有提供修复方案 给了我个 Github 地址我完全不会安装这个东西啊 太复杂了,完全看不懂 谁能帮忙解释一下?

    https://support.cloudflare.com/hc/en-us/articles/200170786-Restoring-original-visitor-IPs-Logging-visitor-IP-addresses-with-mod-cloudflare-

    74 条回复    2020-10-08 20:26:34 +08:00
    presoul
        1
    presoul  
       2020-10-04 10:21:51 +08:00 via Android   ❤️ 2
    x-real-ip
    WesleyNZ
        2
    WesleyNZ  
    OP
       2020-10-04 10:24:01 +08:00
    @presoul 这是什么意思? 我想问的是,那些数据的 log,存放在我网站的哪个物理文件里面,我现在就需要那个真实 Ip 数据
    WesleyNZ
        3
    WesleyNZ  
    OP
       2020-10-04 10:29:22 +08:00
    并以 ISO 3166-1 Alpha 2 格式将国家 /地区代码传递给您的源站。

    请问????这个数据在源站的哪里?
    如果是数据库是哪个数据库?
    是存在哪个表里呢?
    wjhjd163
        4
    wjhjd163  
       2020-10-04 10:32:11 +08:00 via Android   ❤️ 1
    一楼正解
    WesleyNZ
        5
    WesleyNZ  
    OP
       2020-10-04 10:33:09 +08:00
    @wjhjd163 请问如何访问这个值?
    WesleyNZ
        6
    WesleyNZ  
    OP
       2020-10-04 10:33:40 +08:00
    @wjhjd163 这个值在哪个数据库的哪个地方?我找不到。
    shansing
        7
    shansing  
       2020-10-04 10:34:35 +08:00
    HTTP header: x-real-ip
    zhangshine
        8
    zhangshine  
       2020-10-04 10:35:30 +08:00
    真实数据在 header 里面,你需要自己把这个值取出来,可以用程序来做也可以修改 nginx/apache 对应的配置文件来做。
    WesleyNZ
        9
    WesleyNZ  
    OP
       2020-10-04 10:36:28 +08:00
    @zhangshine 请问如何提取数据 我网上找不到教程.....
    WesleyNZ
        10
    WesleyNZ  
    OP
       2020-10-04 10:37:00 +08:00
    @zhangshine header 的数据又在哪里? phpadmin 还是 MySQL?
    我去 cpanel 分别搜索,都搜不到这个 x-real-ip
    zhangshine
        11
    zhangshine  
       2020-10-04 10:43:16 +08:00
    @WesleyNZ 百度 /google: cloudflare 访客 ip
    xionger
        12
    xionger  
       2020-10-04 10:47:05 +08:00 via Android
    有吗?不是透明的传递吗?不需要 header 吧
    WesleyNZ
        13
    WesleyNZ  
    OP
       2020-10-04 10:57:26 +08:00 via iPhone
    @zhangshine 我搜过了 大哥 大哥
    coolcfan
        14
    coolcfan  
       2020-10-04 11:14:29 +08:00 via Android
    Cloudflare 怎么会有能力往你的网站数据库里存东西呢,大家说的也很清楚了是在 HTTP Header 里,感到茫然的话先从 HTTP 协议的基本知识了解一下
    reechangs
        15
    reechangs  
       2020-10-04 11:15:39 +08:00
    如果你用的是 nginx,直接在 conf 中直接增加配置文件即可。
    具体方法可参考 https://wzfou.com/cdn-real-ip/
    codingadog
        16
    codingadog  
       2020-10-04 11:15:47 +08:00 via Android
    http headers 了解一下
    WesleyNZ
        17
    WesleyNZ  
    OP
       2020-10-04 11:16:36 +08:00 via iPhone
    @coolcfan 说的也对,那请问如何提取这一部分数据呢?
    WesleyNZ
        18
    WesleyNZ  
    OP
       2020-10-04 11:17:49 +08:00 via iPhone
    @reechangs 我用的是 CPanel
    WesleyNZ
        19
    WesleyNZ  
    OP
       2020-10-04 11:19:21 +08:00 via iPhone
    @coolcfan 我 end user 不想了解那么多 而且这么简单的一个功能 脚本设置难度也太高了
    krixaar
        20
    krixaar  
       2020-10-04 11:21:45 +08:00 via Android
    用 CPanel 的话直接给服务商发 ticket 问啊,你啥都操作不了的,或者去服务商的知识库里搜一下有没有。
    WesleyNZ
        21
    WesleyNZ  
    OP
       2020-10-04 11:28:34 +08:00
    @krixaar 人家怎么会管你的 Cloudflare 啊?
    这是 cloudflare 不给我设置,关他们什么事?
    mschultz
        22
    mschultz  
       2020-10-04 11:30:48 +08:00
    cPanel 貌似是一个管理面板的名字?不是 Web Server 的名字。Web Server 有比如 Nginx, Apache, EasyApache (其实你主题里那个 「修复方案」 列出了很多)。你看看你具体用的是哪个。

    cPanel 的常见 log 文件的位置,我查到大概是 https://docs.cpanel.net/knowledge-base/cpanel-product/the-cpanel-log-files/
    不过声明我没用过 cPanel,只是随手一搜,你需要的话自己 Google 一下。

    ----
    然后,访客访问网站的时候会给你的 Web Server 发送请求,里面 HTTP Header 里包括一些字段,如果你用了 Cloudflare 的 CDN,那么 Cf-Connecting-Ip 这个字段的值就是访客的真实 IP. 这些 HTTP 请求 Header 一般都会留在 Web Server 的 log 里

    另外不清楚为什么楼上几个同学说 X-Real-Ip 是正解,我个人了解的是,如果用了 Cloudflare CDN,X-Real-Ip 无法获取访客真实 IP,它依然是 Cloudflare 节点的 IP.
    mschultz
        23
    mschultz  
       2020-10-04 11:35:14 +08:00
    另外就是你要确认一下你的网站具体是什么?你可以考虑一下你是不是有必要从 log 那么基础的文件里获取访客 IP.
    搞不好你的网站应用里就有办法抓取到访客的真实 IP.

    举个例子:
    WordPress,它本身就有统计访客来源的功能,但是这个访客 IP 也是根据 HTTP Header 里的我忘了是 Remote-addr 还是 x-real-ip 了,总之如果用了 Cloudflare,这俩都不是访客真实的 IP. 但是,有一个插件 WP Statistics,里面可以指定「将哪个字段认为是访客 IP 」,这里我指定把 「 Cf-Connecting-Ip 」作为访客真实 IP 就可以了
    also24
        24
    also24  
       2020-10-04 11:36:41 +08:00   ❤️ 4
    @WesleyNZ #21
    如果你希望了解这件事的完整原因,建议你学习一下网络协议,了解一下三层转发的细节,以及 CloudFlare 的基础原理。

    如果你不想知道细节,只是想解决这个问题,那么你只需要记以下结论:
    1 、这件事确实是因为你加了 CloudFlare 引起的。
    2 、解决方式就是 X-Forwarded-For 或 X-Real-IP 字段。
    3 、要读取这两个字段,需要靠服务商或你自己的程序来解决。
    4 、如果你自己不知道如何在自己的程序上解决,那你只能求助于服务商。
    5 、服务商如果不愿意解决也是正常的,看具体沟通情况。
    6 、如果想彻底解决,建议学习相关知识,买完整的 VPS 自己配置,而不是 CPanel 虚拟主机。


    服务商的解决方式参考:
    https://support.cpanel.net/hc/en-us/articles/360051107513-Restoring-visitors-IP-with-mod-remoteip
    krixaar
        25
    krixaar  
       2020-10-04 11:40:40 +08:00 via Android
    @WesleyNZ 统计 cf 的源 ip 需要给服务端设置记录 cf 的 header,也就是楼上说的那些,例如 Apache 需要装 mod_cloudflare 并启用,你作为 cPanel 用户一般是不可能有这种权限的,你必须找服务提供商,所以楼上这些回答你一个也搞不明白。cf 因为太常用,服务商兴许已经设置过需要你去开启,那么你就得去找他们的知识库,没有就发 ticket 。
    所以说虚拟空间到处都是坑……
    mschultz
        26
    mschultz  
       2020-10-04 11:40:59 +08:00
    @also24 #24 用了 Cloudflare 之后 X-Forwarded-For 或 X-Real-IP 都是 Cloudflare 节点的 IP 啊?
    应该用 Cf-Connecting-Ip 吧🤔
    windyskr
        27
    windyskr  
       2020-10-04 11:43:25 +08:00 via Android
    没用过,但是从你发的链接点进去

    ![看到]( https://i.loli.net/2020/10/04/7lTtFxMHBsPkIQV.png)
    also24
        28
    also24  
       2020-10-04 11:44:56 +08:00
    @mschultz #26
    CF 确实没有带 X-Real-IP,但是 X-Forwarded-For 是按照规范实现的。
    我这里没有提 CF-Connecting-IP,主要还是因为 X-Forwarded-For 相对来说更常用一些。

    http://support.cloudflare.com/hc/en-us/articles/200170986
    mschultz
        29
    mschultz  
       2020-10-04 11:56:54 +08:00
    @also24 #28 哦哦,谢谢,我好像刚才也想发这个链接来着(不过这个链接里也是推荐用 Cf-Connecting-Ip )。

    我这里有个 Traefik + whoami 的 docker 镜像搭的 demo,我打开的时候,X-Forwarded-For 显示的依然是 Cloudflare 节点的 IP. 这里面只有 Cf-Connecting-Ip 是真实 IP.

    demo 地址: https://www.f-c.xyz

    可能是因为隔了一层 Docker 的原因?

    你可以试一下

    (搭建的文档其实就是 Traefik 的 Hello World: https://doc.traefik.io/traefik/getting-started/quick-start/
    also24
        30
    also24  
       2020-10-04 12:02:29 +08:00
    @mschultz #29
    可能是因为你没有配置对这个字段的信任吧:
    https://doc.traefik.io/traefik/routing/entrypoints/#forwarded-headers

    此类字段,一般都需要配置 Trust IP 的,不然会有伪造 IP 的漏洞。
    dototototo
        31
    dototototo  
       2020-10-04 12:10:58 +08:00 via Android
    cf 是个中介,你委托人家卖东西,人家也告诉你买家是谁了,你听不懂,质问中介怎么还要你来告诉我买家是谁啊,让他自己来买不就行了吗?
    mschultz
        32
    mschultz  
       2020-10-04 12:28:00 +08:00
    @also24 是的
    Actrace
        33
    Actrace  
       2020-10-04 12:34:16 +08:00
    CF 现在已经不提供 ipv4 的访客 IP 地址了。虽然它会提供一个转换后的 ipv4 地址,但是那个地址并不是客户的 IP 地址。

    目前 CF 只在 http header 提供 ipv6 的地址。
    presoul
        34
    presoul  
       2020-10-04 12:40:42 +08:00 via Android
    SingeeKing
        35
    SingeeKing  
       2020-10-04 12:42:51 +08:00 via iPhone
    为什么我记得 CF 告知真实 IP 是一个付费功能
    SingeeKing
        36
    SingeeKing  
       2020-10-04 12:46:21 +08:00 via iPhone
    WesleyNZ
        37
    WesleyNZ  
    OP
       2020-10-04 13:24:23 +08:00 via iPhone
    @Actrace 你这个从哪里的得知的?
    并没有这个说法啊
    datou
        38
    datou  
       2020-10-04 13:54:05 +08:00
    在 header 里面找
    WesleyNZ
        40
    WesleyNZ  
    OP
       2020-10-04 14:10:38 +08:00
    @krixaar

    服务商 5 分钟回复内给解决了,从现在以后都是显示真实 IP 地址,谢谢。

    但是昨天的访客数据都是 cloudfare 的,我特别想知道这个恶意评论的人是谁,我知道 162.1xx.XXX.XXX 这个地址是转换后的地址,但是在我 header 里面,原地址是有的吧?请问去哪里找?
    WesleyNZ
        41
    WesleyNZ  
    OP
       2020-10-04 14:12:04 +08:00
    @Yourshell

    这个文档我看过了 我不知所云,我没有这个权限,服务商帮我开通了真实 IP,但是!
    我昨天记录的数据还是没有恢复真实 IP
    WesleyNZ
        42
    WesleyNZ  
    OP
       2020-10-04 14:28:42 +08:00
    @datou HEADER 在哪里
    icyalala
        43
    icyalala  
       2020-10-04 15:07:44 +08:00   ❤️ 3
    所以说,其实楼主最直接的目的是找到昨天发恶意评论的人是谁。。
    Kaiyuan
        44
    Kaiyuan  
       2020-10-04 15:13:36 +08:00 via iPhone
    我记得是有两个 IP,前面的是 CF,后面的是访客 IP 。
    WesleyNZ
        45
    WesleyNZ  
    OP
       2020-10-04 15:23:35 +08:00 via iPhone
    @icyalala 对,一堆人不知道我什么意思 乱评论
    这件事情已经解决了 ,以后都会显示真正 IP
    skylancer
        46
    skylancer  
       2020-10-04 17:03:34 +08:00   ❤️ 20
    自己语文水平堪忧兼是个小白还说人乱评论... 蜜汁操作
    tanghongkai
        47
    tanghongkai  
       2020-10-04 18:09:59 +08:00
    @skylancer 白嫖惯了是这样的,已 block 免得影响心情
    diaosi
        48
    diaosi  
       2020-10-04 19:36:21 +08:00
    @skylancer 感觉应该针对这种情况做出一些措施
    DeutschXP
        49
    DeutschXP  
       2020-10-04 19:50:09 +08:00 via iPhone   ❤️ 1
    浓浓的甲方气息,不过也是一个小锻炼,如果楼上觉得不舒服的,那么可能还是适合默默写程序,就不要想着转行搞销售搞业务啥的了,会有更多不适应,现实中,甲方态度要恶劣多了
    diaosi
        50
    diaosi  
       2020-10-04 20:08:21 +08:00   ❤️ 4
    @DeutschXP 我觉得不适合这样类比。
    与甲方交流存在利益关系,而在论坛划水没必要忍受什么。
    also24
        51
    also24  
       2020-10-04 21:10:05 +08:00 via Android   ❤️ 1
    @diaosi
    调整心态就好,不要因为『楼主』这个词,就默认发帖人对帖子拥有所有权。

    回帖并不只是发给楼主看的,是给整个社区的新老成员看的。
    WesleyNZ
        52
    WesleyNZ  
    OP
       2020-10-04 22:05:49 +08:00 via iPhone
    你不回答可以走的,一些半吊子进来回答一半还当圣母是最骚的。
    WesleyNZ
        53
    WesleyNZ  
    OP
       2020-10-04 22:06:22 +08:00 via iPhone
    @tanghongkai 您凉快去吧
    codespots
        54
    codespots  
       2020-10-04 22:42:57 +08:00   ❤️ 5
    看楼主的态度,我直接来一句楼主烧饼不为过吧!
    imdong
        55
    imdong  
       2020-10-04 23:13:51 +08:00   ❤️ 2
    @DeutschXP #49 类比不合适,如果楼主花钱找我解决问题,我会当爸爸供起来(钱给够就行)

    ====

    问题解决很简单,但是楼主(发帖者)确实没有将自己的目的说清楚,问题不复杂。

    一早就看到这个贴子,典型的憨憨菜鸟的求助帖(无贬义),比伸手党稍微好一些,但是沟通起来巨费劲,按照《提问的智慧》来说也确实证实自己是有自己尝试通过搜索解决过问题(当然不排除是通过其他渠道伸手得到的一些解决方案),可是由于能力有限无法找到重点且无法理解现有的解决方案(但依然没能通过发帖表达清楚自己的意图,这个确实是发帖者的问题,此处为批评)。

    回帖的人中愿意给出解决方案的(不管正确与否)都应该被鼓励、感谢才对,楼主描述不清楚自己的问题,不要怪大家说,提问就要做好被喷的准备,这年头冲个浪,谁还没被喷过。

    最后,为了防止我也被喷,给个不是个好的但好使的解决方案:

    对于 PHP 来说,在入口文件里(如 index.php ),加入下面的代码,即可(不提供技术支持,使用后果自行承担)

    $_SERVER['REMOTE_ADDR'] = $_SERVER['REAL_IP'] = $_SERVER['CF-Connecting-IP'];

    代码很傻,但是对新手来说,很好使。

    另外,如果之前没有配置过保存,拿你这个恶意评论的 IP 九成九是拿不到的,已经消失了(除非 CF 有提供日志,我不清楚)

    就算你拿到 IP 又怎样?顺着网线去打人不成,先不管你能不能顺着网线找到人,找到又能打得过?毕竟客场作战,打赢了又怎样?弄不好因为寻衅滋事就进去了。

    网络上喷子这么多,何必放在心上,删掉就好了,斤斤计较,对自己一点好处都没有。
    datou
        56
    datou  
       2020-10-05 00:05:15 +08:00
    @WesleyNZ 在程序里记录 request header 的 x-forwarded-for

    套了 cf 的话 x-forwarded-for 会有两个 ip,前面的是访客真实 ip,后面的是 cf 节点 ip
    kn007
        57
    kn007  
       2020-10-05 00:56:07 +08:00   ❤️ 2
    @Livid 、 @Kai 、 @GordianZ 、 @sparanoid 、 @Olivia
    msg7086
        58
    msg7086  
       2020-10-05 05:38:08 +08:00   ❤️ 1
    如果觉得自己是小白,那就谦虚点。态度好点,大家都愿意教,愿意帮忙。
    人就是这样一种生物,如果你很懂,大家都愿意和你说话,如果你很谦虚,虽然不懂,大家也愿意教。
    但是你又不懂,还要一脸傲慢的样子,怕不是在讨打。
    当然了,论坛上也没法打你,最多也就是喷你几句完事,懂的人都 block 了,以后你问的问题不再会有人答。
    但如果这态度放到现实中,就好好挨社会的毒打吧。

    既然你说了「不回答可以走的」,那我也说一句,不想谦虚地讨论问题,您也可以走的。

    最后,回答一下你的问题,既然之前的真实 IP 没有被你记录下来,那么他们就永远丢失了。
    至于拿 IP,也没什么意义,现在 IP 大多都是共享的,你拿一个 IP 等于拿一个区或者一个市,有什么用呢。
    就说你在帖子里那么多恶意回复,我找站长拿了你 IP,难道我还能跑到你们区的电信局一个一个家庭地址找吗。
    真心的,不懂,就多学学,没坏处。
    Showfom
        59
    Showfom  
       2020-10-05 07:57:28 +08:00 via iPhone   ❤️ 1
    @msg7086 可能有人在他网站上骂他 他想查一下这人是哪里的吧 😂
    WhoMercy
        60
    WhoMercy  
       2020-10-05 09:59:38 +08:00   ❤️ 1
    @DeutschXP #49 乙方做多了,起不来了吗。


    @WesleyNZ #45 #52 #53 真当自己是甲方,白嫖有理,真行。
    learningman
        61
    learningman  
       2020-10-05 15:57:52 +08:00
    @DeutschXP 甲方给钱,多恶劣都能忍,这个 XX,凭啥呢?
    xgQikk
        62
    xgQikk  
       2020-10-05 16:42:09 +08:00 via iPhone   ❤️ 1
    怎么这个脑瘫这么久了还在这里发帖
    evilStart
        63
    evilStart  
       2020-10-05 20:25:57 +08:00 via Android
    v2ex 的很多帖子让我觉得这是一个少儿编程论坛。
    WesleyNZ
        64
    WesleyNZ  
    OP
       2020-10-06 18:51:54 +08:00
    @imdong
    谢谢,host 方已经给我改回来,然后把日志文件给我了,日志文件里面 并没有这个数据,只保存了一个 Cloudflare 的 IP 。

    我生气的是,有的回一个字,叫我自己去领悟
    我看了网站中文英文解决方案都 2 个小时了我才来发帖的。

    还有一群不帮忙来 BB 当圣母的。

    我只是想拿回来这个特定的 IP 仅此而已,不过根据你的描述 应该是没办法了,谢谢!

    有提供日
    WesleyNZ
        65
    WesleyNZ  
    OP
       2020-10-06 18:55:07 +08:00
    @imdong 还有,很感谢最后一句话 我也是打算算了(这个人现实生活里可能认识,所以想知道他是谁,不知道就算了)
    WesleyNZ
        66
    WesleyNZ  
    OP
       2020-10-06 18:55:51 +08:00
    @datou 你这个解释非常清楚,谢谢你。
    但是我不太清楚我 server 的 request header 存在哪里?一般的花 wordpress 的 request header 存在哪个地方呢?
    WesleyNZ
        67
    WesleyNZ  
    OP
       2020-10-06 18:56:43 +08:00
    @xgQikk 您的脑子真好,‘地沟油’补得不错吧?
    WesleyNZ
        68
    WesleyNZ  
    OP
       2020-10-06 18:59:17 +08:00
    @msg7086 你看清楚我回复的是谁,再做判断好吗?我只回了某些人,对于其他人,有任何帮助不捣乱的人,我是感谢的
    WesleyNZ
        69
    WesleyNZ  
    OP
       2020-10-06 19:02:24 +08:00
    @DeutschXP 我对,提供帮助的人 都是感谢,态度挺好的啊,那些莫名其妙回答一半的 我都说了我没有基础,你给我个
    x-real-ip 我能知道是什么意思?
    我昨天已经花了 1 个小时读完了 https 的流程 我还是不懂我才来问的啊
    WesleyNZ
        70
    WesleyNZ  
    OP
       2020-10-06 19:02:41 +08:00
    @evilStart 这是编程论坛?
    lvjiefly
        71
    lvjiefly  
       2020-10-07 11:14:31 +08:00
    不回答可以走是什么意思?这是你家?
    julyclyde
        72
    julyclyde  
       2020-10-08 09:56:39 +08:00
    你这个学习能力,建议不要用 cloudflare 之类的高级东西
    比较简洁的环境更适合
    WesleyNZ
        73
    WesleyNZ  
    OP
       2020-10-08 20:24:09 +08:00 via iPhone
    @julyclyde 就是说的你这种人啊 不回答可以走 别占用空间发泄情绪
    WesleyNZ
        74
    WesleyNZ  
    OP
       2020-10-08 20:26:34 +08:00 via iPhone
    更新答案:

    所有的虚拟服务空间都不会保存 request header 到 log 里.
    结论:
    如果你没一开始付费 Cloudflare 的付费功能,或者是你一开始没有按照教程去显示真实 IP, 这些数据就永远拿不回来了。
    你后面开通这两个功能也毫无作用,这些数据就是永久丢失了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2371 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 00:21 · PVG 08:21 · LAX 16:21 · JFK 19:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.