본문 바로가기
Java

[SpringBoot & Nginx] 클라이언트 IP 수집하기

by Playdev 2020. 9. 13.
728x90

 

개인적으로 소규모 운영중인 서비스에 방문기록을 남기는 작업을 진행해보았다.

 

그 중, Ip 정보를 수집을 해야 했는데 구글링 조금 해보면 아래와 같은 코드를 확인할 수가 있다.

public static String getRemoteIp(HttpServletRequest request) {

        String ip = request.getHeader("X-Forwarded-For");

        if (ip == null) {
            ip = request.getHeader("Proxy-Client-IP");
        }
        if (ip == null) {
            ip = request.getHeader("WL-Proxy-Client-IP");
        }
        if (ip == null) {
            ip = request.getHeader("HTTP_CLIENT_IP");
        }
        if (ip == null) {
            ip = request.getHeader("HTTP_X_FORWARDED_FOR");
        }
        if (ip == null) {
            ip = request.getRemoteAddr();
        }

        return ip;
    }

 

Controller 예시
처리 예시

 

 

헌데, 실제 서비스에 올리고 수집된 데이터를 보니 전부 '127.0.0.1' 로 저장되는 것이 아닌가...

수집된 IP 정보

 

원인을 찾다보니, Api 요청이 오면 제일 앞단 nginx 에서 받아 reverse proxy 를 해주는 과정에서 ip 정보가 누락되는 현상이었다.

아래와 같이 nginx conf 파일에 $remote_addr 를 추가함으로써 정상적으로 IP 를 수집할 수 있게 되었다.

 

nginx 설정

 

728x90