Proxy나 LB처럼 L7 스위칭을 하는 장치를 통과한 HTTP 헤더는 host가 L7 스위치의 주소로 덮어써진다.
L7 스위치를 지날 때마다 이전 주소는 X-FORWARDED-FOR에 차곡차곡 기록되는데,
최초 HTTP request를 한 host의 주소를 알기 위해서는 이 정보를 이용해야 한다.
아래는 Java로 구현된 Controller의 소스 코드이다.
public final class HttpUtils {
private static final String HEADER_X_FORWARDED_FOR = "X-FORWARDED-FOR";
/**
* Returns the original host's IP address of the HTTP request.
* It ignores any L7 switches.
*
* @param request
* @return
*/
public static String getFirstRemoteAddr(HttpServletRequest request) {
String remoteAddr = request.getRemoteAddr();
String x;
if ((x = request.getHeader(HEADER_X_FORWARDED_FOR)) != null) {
remoteAddr = x;
int idx = remoteAddr.indexOf(',');
if (idx > -1) {
remoteAddr = remoteAddr.substring(0, idx);
}
}
return remoteAddr;
}
}
출처: http://johannburkard.de/blog/programming/java/x-forwarded-for-http-header.html