在我的网站上,它在带有 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 -6 server_ip
. 所以我的 aaa-record 或者 apache2 或者 php 肯定有问题。我希望有一个人可以帮助我。
没有什么不妥。由于您的网站同时解析为 IPv4 和 IPv6 地址,因此另一端的浏览器(或任何 HTTP 客户端)可能会以随机顺序选择地址,或者更喜欢 IPv6 而不是 IPv4(或相反)。有时它很可能通过 IPv4 连接,有时通过 IPv6 连接。行为必须是特定于浏览器的,并且从一种软件到另一种软件的实现会有很大差异。也许这篇文章也可以提供帮助。