개발/자바
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