PostIT

[Java/Spring/Nginx] 서버에서 Client IP 정확히 가져오기 본문

Webserver/NginX

[Java/Spring/Nginx] 서버에서 Client IP 정확히 가져오기

shun10114 2016. 12. 7. 17:28

많은 사이트들을 돌아다니고 참고해도, 이거 한줄이면 Proxy를 넘어 아이피를 가져올 수 있다고 한다.


public String getUserIP(HttpServletRequest request) {

String ip = request.getHeader("X-FORWARDED-FOR");

logger.info("TEST : X-FORWARDED-FOR : "+ip);

if (ip == null) {

ip = request.getHeader("Proxy-Client-IP");

logger.info("TEST : Proxy-Client-IP : "+ip);

}

if (ip == null) {

ip = request.getHeader("WL-Proxy-Client-IP");

logger.info("TEST : WL-Proxy-Client-IP : "+ip);

}

if (ip == null) {

ip = request.getHeader("HTTP_CLIENT_IP");

logger.info("TEST : HTTP_CLIENT_IP : "+ip);

}

if (ip == null) {

ip = request.getHeader("HTTP_X_FORWARDED_FOR");

logger.info("TEST : HTTP_X_FORWARDED_FOR : "+ip);

}

if (ip == null) {

ip = request.getRemoteAddr();

}

return ip;

}



이 하나면 다 된다는 문제의 코드.

아무리 찍어봐도 로컬호스트 외에는 다 Null값이 뜨는데 도데체 뭘 가져온다고 말하는 것인지 납득을 할 수 없었다.


그래서 찾고 찾아보니 결국 서버설정과 연관된것이었다.



- vi /etc/nginx/nginx.conf

http {

set_real_ip_from   127.0.0.1;

real_ip_header X-Forwarded-For;



- vi /etc/nginx/conf.d/default.conf

location / {
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Host $http_host;
    proxy_pass http://tomcat_servers/

}



nginx.conf에서 header 부분의 설정을 통해 nginx에서 proxy되는 부분을 설정해주어야 Spring, 즉 Java에서 원하는 IP값을 가져올 수 있다.

더욱 더 나아가, 서버의 설정만 알고있다면 위의 자바코드를 길게 비교할 필요도 없지 않은가 싶다.

서버 따로 개발 따로 심도있게 해야하지만, 대부분의 회사는 서버의 정보를 개발자가 알기는 쉽지 않다고 한다. (아직 겪어보진 않았지만)

그러므로 저렇게 길게 나왔던게 아닌가 싶다.


Anyway, IP는 여기서 마치고자 한다.





Comments