본문으로 건너뛰기

윈도우 호스팅에서 실제 접속자 IP는 어떻게 확인하나요?

💡 요약 정리

  • DDOS 대응 등으로 앞단에 방어 장비가 있을 때, REMOTE_ADDR에는 장비 IP가 보일 수 있습니다.
  • 실제 접속자 IP(REALIP)는 보통 HTTP_X_FORWARDED_FOR에 담깁니다. 값이 없으면 REMOTE_ADDR로 보완하세요.
  • 먼저 테스트 PC IP를 확인하고 어떤 변수가 올바른 값을 주는지 테스트하세요. 테스트 IP 확인: http://ipconfig.kr
  • HTTPS에서는 HTTP_X_FORWARDED_FOR가 빈 값일 수 있습니다. 이때는 조건문으로 REMOTE_ADDR로 대체하세요.

1. 왜 실제 IP가 보이지 않나요?

방어 장비(예: DDOS 대응 장비, 프록시/로드밸런서)가 서비스 서버 앞단에 적용되면, 소스에서 REMOTE_ADDR로는 실제 접속자 IP가 아니라 방어 장비의 IP가 들어올 수 있습니다. 이때는 HTTP_X_FORWARDED_FOR 헤더를 사용해 실제 접속자 IP(REALIP)를 확인해야 합니다.


2. 어떤 변수가 실제 IP를 주는지 테스트하기

아래 테스트 절차를 따라 실제 접속자 IP가 어느 변수에 담기는지 확인하세요.

  • 테스트 PC IP 확인: http://ipconfig.kr
  • 다음 ASP(클래식 ASP) 테스트 소스를 페이지에 적용해, 각 변수에 담기는 값을 출력해 봅니다.
<%
ipaddress1 = Request.ServerVariables("REMOTE_ADDR")
ipaddress2 = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
Response.Write "REMOTE_ADDR : " &ipaddress1
Response.Write "<br>"
Response.Write "HTTP_X_FORWARDED_FOR : " &ipaddress2
%>
  • 출력 결과에서 테스트 PC의 IP가 정확히 어느 변수에 들어오는지 확인한 뒤, 실서비스 소스에서 REALIP를 받는 변수를 해당 값으로 수정합니다.

3. HTTPS에서 HTTP_X_FORWARDED_FOR가 빈 값일 때 처리하기

HTTPS 프로토콜에서는 HTTP_X_FORWARDED_FOR가 빈 값으로 응답하는 경우가 있습니다. 이때는 조건문으로 우선 HTTP_X_FORWARDED_FOR를 확인하고, 값이 없거나 공백이면 REMOTE_ADDR로 대체하세요.

<%
realip = Request.ServerVariables("HTTP_X_FORWARDED_FOR")

if isNull(realip) or Len(Trim(realip)) = 0 then
    realip = Request.ServerVariables("REMOTE_ADDR")
end if

Response.Write "<b>REALIP</b> : " & realip
%>

4. 적용 시 유의사항

  • 개발 소스나 프레임워크에 따라 요청 헤더를 받는 방법이 다를 수 있습니다.
  • 서비스 환경(HTTP/HTTPS, 프록시 유무, 보안 장비 구성)에 따라 결과가 달라질 수 있습니다.
  • 사용 중인 헤더 변수가 테스트 IP를 정상적으로 받는지 반드시 확인한 뒤 적용하세요.