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
'개발 > 자바' 카테고리의 다른 글
| X-Forwarded-For란? (0) | 2025.05.14 |
|---|---|
| Java에서 쓰레드 개수 설정: CPU 바운드 vs I/O 바운드 작업 최적화 방법 (0) | 2025.03.18 |
| Java 21의 새로운 기능 (0) | 2025.02.27 |
| Jakarta EE 9 (0) | 2025.02.24 |
| Map 인터페이스 구현체(HashMap, TreeMap, LinkedHashMap ....) (0) | 2025.02.20 |