2017-11-03 9 views
1

최근에 Google Cloud Container 클러스터에 웹 사이트를 배포했으며 실제 웹 사이트 소스 코드가 클러스터에 의해 생성 된 컴퓨터 엔진 인스턴스 내에서 실행됩니다. 자동으로Google Cloud Compute 엔진 인스턴스 (컨테이너 클러스터 생성)에서 방문자의 공용 IP를 가져올 수 없음

웹 사이트에서 공개 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를 얻는 방법은 있습니까? 서버 측 구성을 일부 변경해야합니까? 어떤 도움을 주시면 감사하겠습니다. 그리고 대단히 감사드립니다.

+0

그럼, 어떻게 작동합니까? –

+0

일반적으로 위 기능이 작동하지만 Google Cloud (kubernetes) 클러스터 포드에서는 10.100.xxx.xxx와 같은 내부 IP 만 반환합니다. Google Cloud에는 클러스터 포드에 대한 특별한 구성이있을 수 있습니다. 더 많은 연구를 할 시간이 없었고 JS로 전환하여 기능을 완료했습니다. 자세한 내용은 첫 번째 답변에 대한 내 의견을 참조하십시오. – Charles

답변

0

이 스크립트는 방문자의 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입니다.

+0

도움 주셔서 감사합니다. 그리고 PHP를 사용하지 않고 JS를 사용하여 방문자의 IP 세부 정보를 얻었습니다. 내가 사용할 수있는 무료 JS 라이브러리가 있으며 무료, freegeoip.net이라고 생각합니다. – Charles

+0

JS가 클라이언트 기반이므로 JS가 작동하지 않는다면 JS가 작동한다는 것은 기쁩니다. 작동하지 않습니다. –