【问题标题】:Cannot get visitor's public IP in Google Cloud Compute engine instance (container cluster created)谷歌云计算引擎实例无法获取访问者的公网IP(已创建容器集群)
【发布时间】:2018-04-15 15:44:22
【问题描述】:

最近我在google云容器集群中部署了一个网站,我相信实际的网站源代码是在集群自动创建的计算机引擎实例中运行的。

在网站中,我想记录访问者的访问信息,包括公共 IP 地址,例如80.87.131.131。但是我发现我只能获取内部IP地址,比如10.128.0.3

这是我用来获取访问者IP的PHP函数。

function get_ip()
{
    $client  = @$_SERVER['HTTP_CLIENT_IP'];
    $forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
    $remote  = $_SERVER['REMOTE_ADDR'];

    if(filter_var($client, FILTER_VALIDATE_IP))
    {
        $ip = $client;
    }
    elseif(filter_var($forward, FILTER_VALIDATE_IP))
    {
        $ip = $forward;
    }
    else
    {
        $ip = $remote;
    }

    return $ip;
}

有没有办法获取访问者的公网IP?我需要进行一些服务器端配置吗?任何帮助将不胜感激。并提前非常感谢。

【问题讨论】:

  • 那么,它对你有用吗?
  • 通常上面的函数是有效的,但是在谷歌云(kubernetes)集群的pod中,这个函数只返回内部IP,比如10.100.xxx.xxx。我认为 Google Cloud 可能对集群 pod 有一些特殊的配置。我没有时间做更多的研究,我已经切换到 JS 来完成这个功能。有关详细信息,请参阅我对第一个答案的评论。

标签: php google-app-engine google-cloud-platform clientip


【解决方案1】:

此脚本将访问者的 IP 记录在一个文本文件中。

<?php
function scoate_ip(){
if (getenv('HTTP_X_FORWARDED_FOR')){
$ip=getenv('HTTP_X_FORWARDED_FOR');
} else {
$ip=getenv('REMOTE_ADDR');
}
return $ip;
}
$ip_trimis = scoate_ip();

$locatie = fopen("IP/IP.txt","a+");
fwrite ($locatie, "\n".$ip_trimis."\n");
fclose($locatie);
?>

您可以根据需要对其进行编辑。 $ip_trimis 是访问者的 IP。

【讨论】:

  • 感谢您的帮助。我放弃了使用PHP并使用JS来获取访问者的IP详细信息。有一个免费的 JS 库我可以使用,我相信它是免费的,freegeoip.net。
  • 我很高兴它可以这样工作,但是 JS 是基于客户端的,如果您的访问者停用了 JS,这将不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-09
  • 2020-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-27
  • 2023-04-01
相关资源
最近更新 更多