>  기사  >  백엔드 개발  >  PHP는 실제 IP를 얻을 수 없습니다

PHP는 실제 IP를 얻을 수 없습니다

王林
王林원래의
2019-09-29 17:46:244223검색

PHP는 실제 IP를 얻을 수 없습니다

1. 사용자의 실제 IP 주소를 얻습니다.

 public static function getClientIp()
 {
 if (getenv('HTTP_CLIENT_IP')) {
  $ip = getenv('HTTP_CLIENT_IP');
 }
 if (getenv('HTTP_X_REAL_IP')) {
  $ip = getenv('HTTP_X_REAL_IP');
 } elseif (getenv('HTTP_X_FORWARDED_FOR')) {
  $ip = getenv('HTTP_X_FORWARDED_FOR');
  $ips = explode(',', $ip);
  $ip = $ips[0];
 } elseif (getenv('REMOTE_ADDR')) {
  $ip = getenv('REMOTE_ADDR');
 } else {
  $ip = '0.0.0.0';
 }

 return $ip;
 }

참고: #🎜🎜 #

$_SERVER와 getenv의 차이점은 getenv는 IIS isapi 모드에서 실행되는 PHP를 지원하지 않는다는 것입니다. getenv("REMOTE_ADDR") 함수는 일반적으로 Apache에서 IP 주소를 얻을 수 있지만 iis에서는 효과가 없습니다. $_SERVER['REMOTE_ADDR'] 함수는 Apache에서 방문자의 IP 주소를 성공적으로 얻을 수 있지만 iis에서도 효율적입니다.

2. REMOTE_ADDR 정보

이 변수는 "직접 소스"의 IP 주소를 가져옵니다. 이 주소에 대한 클라이언트 IP를 직접 요청합니다. 단일 서버의 경우 이 IP는 매우 정확하며 위조가 불가능합니다. 물론 모든 프로그램이 단일 서버여야 하는 것은 아닙니다. 예를 들어 로드 밸런싱을 사용하는 경우(예: 로드 밸런싱을 위해 haproxy 또는 nginx 사용) 프로세스가 클라이언트->로드이므로 이 IP는 전달 시스템의 IP입니다. 밸런싱 -> 서버 측. 클라이언트가 아닌 로드밸런서가 직접 접속하는 서버입니다.

3. HTTP_X_FORWARDED_FOR 및 HTTP_CLIENT_IP 정보

로드 밸런싱에서는 REMOTE_ADDR을 직접 사용하여 클라이언트 IP를 얻을 수 없습니다. 문제는 해결되어야 합니다. 따라서 클라이언트 IP를 HEAD에 추가하여 서버로 보내면 서버가 클라이언트의 실제 IP를 얻을 수 있도록 하는 로드 밸런싱 측이 파생됩니다. 물론 위조라고 부르는 것이 생성됩니다. 결국 HEAD 프로토콜의 고정 데이터를 제외하고 다른 데이터는 사용자 정의할 수 있습니다.

추천 튜토리얼:

PHP 비디오 튜토리얼

위 내용은 PHP는 실제 IP를 얻을 수 없습니다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.