На моем веб-сайте, который работает с apache2 на сервере debian с записью aaa, я проверяю с помощью php, использует ли пользователь IPv6 или нет. Для этого я получаю 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";
}
Все работает нормально. Но иногда я получаю адрес IPv4, даже если у меня есть соединение Ipv6. И это не может быть ошибкой моего подключения к Интернету, потому что при посещении веб-сайта проверки IP (например, этот ) он показывает мне адрес IPv6. Я также могу пинговать свой сервер с помощью ping -6 server_ip
. Значит, должна быть проблема с моей aaa-записью, или с apache2, или, возможно, с php.
Надеюсь, кто-нибудь сможет мне помочь.
В этом нет ничего плохого. Поскольку ваш веб-сайт разрешает адреса как IPv4, так и IPv6, браузер (или любой другой HTTP-клиент) на другом конце может выбрать адрес в случайном порядке или предпочесть IPv6, а не IPv4 (или наоборот). Иногда он вполне может подключаться через IPv4, а иногда через IPv6. Поведение должно зависеть от браузера, и реализация будет сильно различаться от одного программного обеспечения к другому. Возможно, этот пост тоже поможет.