在 cloudflare 后面获取访问者 ipv4

Get visitors ipv4 behind cloudflare

我只是有问题,我想获取访问者的 IP 地址。一切都很好,但一位用户只是给我 IPv6。 这是我可以给你的代码,而且我刚刚安装了 cloudflare apache2 Mod.

 $_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"] ? $_SERVER["HTTP_CF_CONNECTING_IP"] : $_SERVER["REMOTE_ADDR"];
 $ip = $_SERVER['REMOTE_ADDR'];

 if(isset($_SERVER['HTTP_CF_CONNECTING_IP'])){
     $ip = $_SERVER['HTTP_CF_CONNECTING_IP'];
 }

执行此操作的唯一方法是通过以下方式禁用 CloudFlare 中的 IPv6 支持:

1) 在 DNS 中删除所有 AAAA 记录(仅保留 A 记录)。 2) 在 CloudFlare 仪表板上进入网络并关闭 "IPv6 Compatibility".

虽然我不推荐这个;您可能很快就会发现无法连接到您网站的人。相反,最好确保您的平台完全支持 IPv6。

请注意,CF 使禁用 ipv6 变得稍微困难​​一些(从 gui 不可能,必须由 api 完成)但它们现在包含一个用于添加 'Pseudo IPv4' 地址的选项到 headers - 通过覆盖 Cf-Connecting-IPX-Forwarded-For 或添加 Cf-Pseudo-IPv4 header.

对于(还)不支持 ipv6 的遗留应用程序,这可以作为 stop-gap 非常方便 - https://support.cloudflare.com/hc/en-us/articles/202494830-Pseudo-IPv4-Supporting-IPv6-addresses-in-legacy-IPv4-applications