본문 바로가기
WEB, WAS/NGINX

nginx client ip 얻기 ( X-Forwarded-For )

by 애플 로그 2022. 7. 25.
반응형

nginx client ip 얻기 ( X-Forwarded-For )

 

클라이언트 ->  nginx (proxy_pass) -> spring boot 서버

 

 

Spring boot 서버 에서는 java 코드로 아래와 같이 클라이언트 아이피를 구했다.

  private String getClientAddr(HttpServletRequest request) {
      String clientAddr = request.getHeader("X-Forwarded-for");
      if (clientAddr != null && clientAddr.length() > 0 ){
        return clientAddr; 
     }
    return request.getRemoteAddr();
  }

위와 같은 호출 순서에서 applicaton서버에서 아이피를 체크하면, "X-Forwarded-for"값에서

항상 nginx 서버의 IP가 얻어 졌다.

나는 Client IP가 얻고 싶은데, 이거 왜 이럴까??

 

nginx.conf 기본 설정

    location / {
        proxy_pass http://123.123.123.123:9000;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
     }
    }

 

해결방법

X-Forwaed-For 아이피에 실제 client ip를 넣어서 보내는 설정이 가능했다.

아래 설정을 추가시에 실제 client ip 를 얻을수 있었다.

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

 

해결 설정 최종 값

    server {
    listen 8080 ssl;
    server_name *.ynkim.kr;
    ssl_certificate /cloud/_webserver/nginx-1.21.6/ssl/cert.pem;
    ssl_certificate_key /cloud/_webserver/nginx-1.21.6/ssl/PrivateKey.pem;
    ssl_password_file /cloud/_webserver/nginx-1.21.6/ssl/ssl.pass;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    charset utf-8;

    location / {
        proxy_pass http://123.123.123.123:9000;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     }
    }

 

댓글