在我的网站上,该网站在具有 aaa 记录的 Debian 服务器上使用 apache2 运行,我使用 php 检查用户是否使用 IPv6。为此,我使用以下代码 shippet 获取用户的 IP 地址:
if (isset($_SERVER['HTTP_CLIENT_IP'])){
$ip = $_SERVER['HTTP_CLIENT_IP'];
}else if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}else if(isset($_SERVER['HTTP_X_FORWARDED'])){
$ip = $_SERVER['HTTP_X_FORWARDED'];
}else if(isset($_SERVER['HTTP_FORWARDED_FOR'])){
$ip = $_SERVER['HTTP_FORWARDED_FOR'];
}else if(isset($_SERVER['HTTP_FORWARDED'])){
$ip = $_SERVER['HTTP_FORWARDED'];
}else if(isset($_SERVER['REMOTE_ADDR'])){
$ip = $_SERVER['REMOTE_ADDR'];
}else{
echo "ERROR";
}
这一切都很好。但有时即使我有 IPv6 连接,我也会得到 IPv4 地址。这不可能是我的互联网连接错误,因为当我访问 IP 检查网站(如这一)它向我显示了一个 ipv6 地址。我也可以用 ping 我的服务器ping -6 server_ip
。所以我的 aaa 记录或 apache2 或 php 一定有问题。我希望有人能帮助我。
答案1
这没什么不对。由于您的网站解析为 IPv4 和 IPv6 地址,另一端的浏览器(或任何 HTTP 客户端)可能会随机选择一个地址,或者更喜欢 IPv6 而不是 IPv4(或相反)。它很可能有时通过 IPv4 连接,有时通过 IPv6 连接。行为必须特定于浏览器,并且不同软件的实现会有很大差异。也许这个帖子也可以帮忙。