개발/자바

IP 헤더 정보 우선순위를 통해 IP 정보 가져오기

피터JK 2025. 5. 14. 16:53
728x90

▣ IP 관련 헤더들

헤더 이름 설명
X-Forwarded-For 가장 널리 사용. 프록시를 거쳐 온 경로에 따라 IP 나열
X-Real-IP 프록시(특히 Nginx)에서 단일 클라이언트 IP를 직접 명시
Forwarded RFC 7239 표준. for=... 형식
Proxy-Client-IP WebLogic, WebSphere 등의 WAS에서 사용하는 비표준 헤더
WL-Proxy-Client-IP WebLogic(WL) 서버가 설정하는 클라이언트 IP
HTTP_CLIENT_IP 일부 프록시 환경 또는 PHP 기반 웹서버에서 사용
HTTP_X_FORWARDED_FOR Apache mod_proxy, 일부 PHP 서버 등에서 자동 설정
X-Cluster-Client-IP AWS ELB와 같은 로드밸런서 환경에서 사용
True-Client-IP Akamai, Cloudflare 등 CDN이 삽입하는 클라이언트 IP
CF-Connecting-IP Cloudflare 전용 IP 헤더
Fastly-Client-IP Fastly CDN 전용 헤더
X-Originating-IP 이메일 시스템이나 일부 웹 애플리케이션에서 사용
X-Remote-Addr, X-Remote-IP 내부 시스템 또는 일부 프레임워크에서 임의 설정 가능

 우선순위에 따른 IP 정보 가져오기

public static String getClientIp(HttpServletRequest request) {
    String[] headerNames = {
        "X-Forwarded-For",
        "Proxy-Client-IP",
        "WL-Proxy-Client-IP",
        "HTTP_CLIENT_IP",
        "HTTP_X_FORWARDED_FOR",
        "X-Real-IP",
        "X-Cluster-Client-IP",
        "True-Client-IP",
        "CF-Connecting-IP"
    };

    for (String header : headerNames) {
        String ip = request.getHeader(header);
        if (ip != null && !ip.isEmpty() && !"unknown".equalsIgnoreCase(ip)) {
            return ip.split(",")[0].trim(); // 여러 개 있을 경우 첫 번째 IP
        }
    }

    return request.getRemoteAddr(); // fallback
}

 

728x90