PHP에서 클라이언트 IP를 얻는 데 사용되는 변수는 다음과 같습니다.
$_SERVER['HTTP_CLIENT_IP'] 이 헤더는 존재하지만 드물며 모든 서버에서 반드시 구현되는 것은 아닙니다. 클라이언트가 위조될 수 있습니다. (추천 학습: PHP 프로그래밍 입문부터 숙련까지)
$_SERVER['HTTP_X_FORWARDED_FOR']에는 표준 정의가 있으며 HTTP 프록시 이후 클라이언트 IP 주소를 식별하는 데 사용됩니다. 형식은 clientip, Proxy1, Proxy2입니다. 자세한 설명은 http://zh.wikipedia.org/wiki/X-Forwarded-F...를 참조하세요. 클라이언트가 위조될 수 있습니다.
$_SERVER['REMOTE_ADDR']은 사용자의 프록시 서버일 수도 있고 자신의 역방향 프록시일 수도 있습니다. 클라이언트는 위조될 수 없습니다.
클라이언트가 위조할 수 있는 매개변수는 필터링하고 검증해야 합니다! 많은 사람들은 $_SERVER 변수의 내용을 신뢰할 수 있다고 생각합니다. 실제로는 $_SERVER['HTTP_CLIENT_IP'] 및 $_SERVER['HTTP_X_FORWARDED_FOR'] 모두 클라이언트 요청의 헤더에서 나옵니다.
사용자의 실제 IP를 엄격하게 얻으려면
크롤링 방지 및 투표 방지에서 클라이언트가 위조할 수 있는 것은 아무것도 신뢰하지 않습니다.
CDN이 없으므로 사용자가 PHP 서버에 직접 연결됩니다.
이 경우 TCP 계층 핸드셰이크 IP인 $_SERVER['REMOTE_ADDR']
자체 구축 클러스터를 구축하고 nginx를 사용하여 로드 밸런싱
이 경우 PHP 애플리케이션 서버는 외부에 노출될 수 없습니다. nginx에서 실제 IP를 얻은 후 PHP 서버로 보냅니다.
location /{ proxy_set_header client-real-ip $remote_addr; }
client-real-ip 이름은 원하는 대로 지정할 수 있습니다. nginx와 악수하는 tcp 레이어의 IP를 PHP로 전달합니다.
CDN을 사용할 때 PHP 서버에서 소스를 가져올 때
CDN은 클라이언트의 핸드셰이크 IP를 전달합니다. 각 회사의 전략은 다르므로 자세한 내용은 CDN 설명서를 확인하세요.
물론, 엄격한 검증이 필요한 사업을 2차 도메인 이름으로 묶고 CDN을 피하기 위해 자체 nginx 서버를 별도로 사용할 수도 있습니다.
위 내용은 PHP에서 실제 IP를 식별하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!