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

Posted by 배트
,